Commit a973468c authored by fallenstardust's avatar fallenstardust

点击卡名查询关联卡片(描述含卡名,该卡的同字段为关联卡)

parent 52701420
......@@ -211,6 +211,15 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
mListener.onOpenUrl(cardInfo);
}
});
name.setOnClickListener((v) -> {
if (mListener != null) {
Card cardInfo = getCardInfo();
if (cardInfo == null) {
return;
}
mListener.onGetRelatedCardList(cardInfo);
}
});
findViewById(R.id.lastone).setOnClickListener((v) -> {
onPreCard();
});
......@@ -715,6 +724,8 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
void onSearchKeyWord(String keyword);
void onGetRelatedCardList(Card cardInfo);
void onClose();
}
......@@ -746,6 +757,11 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
@Override
public void onGetRelatedCardList(Card cardInfo) {
}
@Override
public void onAddSideCard(Card cardInfo) {
......
......@@ -6,6 +6,7 @@ import android.graphics.Paint;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
......@@ -29,6 +30,7 @@ import com.app.hubert.guide.model.HighLight;
import com.app.hubert.guide.model.HighlightOptions;
import com.ourygo.lib.duelassistant.util.DuelAssistantManagement;
import java.util.ArrayList;
import java.util.List;
import cn.garymb.ygomobile.Constants;
......@@ -46,6 +48,7 @@ import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import ocgcore.CardManager;
import ocgcore.DataManager;
import ocgcore.PackManager;
import ocgcore.data.Card;
......@@ -60,6 +63,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
protected DrawerLayout mDrawerlayout;
protected CardSearcher mCardSearcher;
protected PackManager mPackManager;
protected CardManager mCardManager;
protected CardListAdapter mCardListAdapter;
protected boolean isLoad = false;
private RecyclerView mListView;
......@@ -96,6 +100,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
Button btn_search = layoutView.findViewById(R.id.btn_search);
btn_search.setOnClickListener((v) -> showSearch(true));
mPackManager = DataManager.get().getPackManager();
mCardManager = DataManager.get().getCardManager();
mCardLoader = new CardLoader(getContext());
mCardLoader.setCallBack(this);
mCardSearcher = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader);
......@@ -308,6 +313,11 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
showSearchKeyWord(keyword);
}
@Override
public void onGetRelatedCardList(Card cardInfo) {
getRelatedCardList(cardInfo);
}
@Override
public void onImageUpdate(Card cardInfo) {
mCardListAdapter.notifyItemChanged(cardInfo);
......@@ -350,6 +360,50 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
mCardLoader.search(searchInfo);
}
private void getRelatedCardList(Card cardInfo) {
SparseArray<Card> cards = mCardManager.getAllCards();
// 使用 ArrayList 来保存匹配的卡片
List<Card> matchingCards = new ArrayList<>();
// 将 cardInfo 的 setCode 转换为 List<Long>
List<Long> cardInfoSetCodes = new ArrayList<>();
for (long setCode : cardInfo.getSetCode()) {
if (setCode != 0) cardInfoSetCodes.add(setCode);
}
Log.w("cc cardInfoSetCodes", cardInfoSetCodes.toString());
for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i);
// 检查卡片是否已经存在于匹配列表中
if (!matchingCards.contains(card)) {
// 检查卡片名或描述是否包含给定卡片的名字
if (!card.Name.equals(cardInfo.Name) && (card.Name.contains(cardInfo.Name) || card.Desc.contains(cardInfo.Name))) {
matchingCards.add(card);
continue; // 如果名称或描述匹配,则跳过系列代码检查
}
// 获取卡片的系列代码并检查是否有相同的系列代码
for (long setCode : card.getSetCode()) {
if (cardInfoSetCodes.contains(setCode)) {
matchingCards.add(card);
break; // 如果已经找到匹配,可以跳出内层循环
}
}
}
}
// 日志输出匹配的卡片数量
Log.w("cc related cards", "Found " + matchingCards.size() + " related cards.");
// 确保 matchingCards 不为空时调用 onSearchResult
if (!matchingCards.isEmpty()) {
onSearchResult(matchingCards, false);
} else {
Log.w("cc", "No related card found");
}
}
private void showPackList(Card cardInfo) {
Integer idToUse = cardInfo.Alias != 0 ? cardInfo.Alias : cardInfo.Code;
......
......@@ -104,6 +104,7 @@ import cn.garymb.ygomobile.utils.ShareUtil;
import cn.garymb.ygomobile.utils.YGODialogUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import ocgcore.CardManager;
import ocgcore.DataManager;
import ocgcore.PackManager;
import ocgcore.data.Card;
......@@ -116,6 +117,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
protected RecyclerView mListView;
protected CardLoader mCardLoader;
protected CardSearcher mCardSearcher;
protected CardManager mCardManager;
protected PackManager mPackManager;
protected CardListAdapter mCardListAdapter;
protected boolean isLoad = false;
......@@ -169,6 +171,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
setListeners();
mPackManager = DataManager.get().getPackManager();
mCardManager = DataManager.get().getCardManager();
mCardLoader = new CardLoader(getContext());
mCardLoader.setCallBack(this);
mCardSearcher = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader);
......@@ -568,6 +571,11 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
showSearchKeyWord(keyword);//根据关键词搜索
}
@Override
public void onGetRelatedCardList(Card cardInfo) {
getRelatedCardList(cardInfo);
}
@Override
public void onClose() {
mDialog.dismiss();
......@@ -621,6 +629,50 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
mCardLoader.search(searchInfo);
}
private void getRelatedCardList(Card cardInfo) {
SparseArray<Card> cards = mCardManager.getAllCards();
// 使用 ArrayList 来保存匹配的卡片
List<Card> matchingCards = new ArrayList<>();
// 将 cardInfo 的 setCode 转换为 List<Long>
List<Long> cardInfoSetCodes = new ArrayList<>();
for (long setCode : cardInfo.getSetCode()) {
if (setCode != 0) cardInfoSetCodes.add(setCode);
}
Log.w("cc cardInfoSetCodes", cardInfoSetCodes.toString());
for (int i = 0; i < cards.size(); i++) {
Card card = cards.valueAt(i);
// 检查卡片是否已经存在于匹配列表中
if (!matchingCards.contains(card)) {
// 检查卡片名或描述是否包含给定卡片的名字
if (!card.Name.equals(cardInfo.Name) && (card.Name.contains(cardInfo.Name) || card.Desc.contains(cardInfo.Name))) {
matchingCards.add(card);
continue; // 如果名称或描述匹配,则跳过系列代码检查
}
// 获取卡片的系列代码并检查是否有相同的系列代码
for (long setCode : card.getSetCode()) {
if (cardInfoSetCodes.contains(setCode)) {
matchingCards.add(card);
break; // 如果已经找到匹配,可以跳出内层循环
}
}
}
}
// 日志输出匹配的卡片数量
Log.w("cc related cards", "Found " + matchingCards.size() + " related cards.");
// 确保 matchingCards 不为空时调用 onSearchResult
if (!matchingCards.isEmpty()) {
onSearchResult(matchingCards, false);
} else {
Log.w("cc", "No related card found");
}
}
private void showPackList(Card cardInfo) {
Integer idToUse = cardInfo.Alias != 0 ? cardInfo.Alias : cardInfo.Code;
// 确保再次检查 PackManager 是否已经加载完成
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment