Commit 3bd84be2 authored by fallenstardust's avatar fallenstardust

高亮在线备份的关键词查找结果中和关键词相同的文本

parent e10b2f82
...@@ -2,9 +2,14 @@ package cn.garymb.ygomobile.ui.cards.deck_square; ...@@ -2,9 +2,14 @@ package cn.garymb.ygomobile.ui.cards.deck_square;
import static cn.garymb.ygomobile.ui.cards.deck_square.DeckSquareFileUtil.convertToGMTDate; import static cn.garymb.ygomobile.ui.cards.deck_square.DeckSquareFileUtil.convertToGMTDate;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.util.Log; import android.util.Log;
import android.widget.ImageView; import android.widget.ImageView;
import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder; import com.chad.library.adapter.base.viewholder.BaseViewHolder;
...@@ -102,26 +107,62 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyOnlineDeckDetail, Base ...@@ -102,26 +107,62 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyOnlineDeckDetail, Base
} }
// 筛选函数 // 在适配器中添加成员变量保存当前搜索关键词
private String currentKeyword = "";
// 修改筛选函数,保存当前关键词
public void filter(String keyword) { public void filter(String keyword) {
currentKeyword = keyword; // 保存关键词
List<MyOnlineDeckDetail> filteredList = new ArrayList<>(); List<MyOnlineDeckDetail> filteredList = new ArrayList<>();
if (keyword.isEmpty()) { if (keyword.isEmpty()) {
// 如果关键词为空,则显示所有数据
filteredList.addAll(DeckManagerFragment.getOriginalData()); filteredList.addAll(DeckManagerFragment.getOriginalData());
} else { } else {
// 遍历原始数据,筛选出包含关键词的item String lowerKeyword = keyword.toLowerCase(); // 转为小写,实现不区分大小写搜索
for (MyOnlineDeckDetail item : DeckManagerFragment.getOriginalData()) { for (MyOnlineDeckDetail item : DeckManagerFragment.getOriginalData()) {
if (item.getDeckName().contains(keyword) || item.getDeckType().contains(keyword)) { if (item.getDeckName().toLowerCase().contains(lowerKeyword) ||
item.getDeckType().toLowerCase().contains(lowerKeyword)) {
filteredList.add(item); filteredList.add(item);
} }
} }
} }
// 更新显示的数据
getData().clear(); getData().clear();
addData(filteredList); addData(filteredList);
notifyDataSetChanged(); notifyDataSetChanged();
} }
/**
* 将文本中包含关键词的部分高亮显示
* @param text 原始文本
* @param keyword 关键词
* @return 处理后的SpannableString
*/
private SpannableString getHighlightedText(String text, String keyword) {
if (text == null || keyword.isEmpty()) {
return new SpannableString(text == null ? "" : text);
}
SpannableString spannable = new SpannableString(text);
String lowerText = text.toLowerCase();
String lowerKeyword = keyword.toLowerCase();
int index = lowerText.indexOf(lowerKeyword);
// 循环查找所有匹配的关键词并设置高亮
while (index >= 0) {
int start = index;
int end = index + keyword.length();
// 设置高亮样式,可以自定义颜色和样式
spannable.setSpan(new ForegroundColorSpan(YGOUtil.c(R.color.holo_blue_bright)),
start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);
// 查找下一个匹配
index = lowerText.indexOf(lowerKeyword, end);
}
return spannable;
}
private void deleteMyDeckOnLine(MyOnlineDeckDetail item) { private void deleteMyDeckOnLine(MyOnlineDeckDetail item) {
if (item != null) { if (item != null) {
LoginToken loginToken = DeckSquareApiUtil.getLoginData(); LoginToken loginToken = DeckSquareApiUtil.getLoginData();
...@@ -169,8 +210,12 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyOnlineDeckDetail, Base ...@@ -169,8 +210,12 @@ public class MyDeckListAdapter extends BaseQuickAdapter<MyOnlineDeckDetail, Base
} else { } else {
iv_box.clearColorFilter(); iv_box.clearColorFilter();
} }
helper.setText(R.id.my_online_deck_type,item.getDeckType().equals("") ? "" : "-"+item.getDeckType()+"-"); // 处理卡组类型高亮, 需要判断卡组分类的内容
helper.setText(R.id.my_deck_name, item.getDeckName()); SpannableString highlightedType = getHighlightedText(item.getDeckType().equals("") ? "" : "-"+item.getDeckType()+"-", currentKeyword);
helper.setText(R.id.my_online_deck_type, highlightedType);
// 处理卡组名称高亮
SpannableString highlightedName = getHighlightedText(item.getDeckName(), currentKeyword);
helper.setText(R.id.my_deck_name, highlightedName);
helper.setText(R.id.deck_update_date, convertToGMTDate(item.getDeckUpdateDate())); helper.setText(R.id.deck_update_date, convertToGMTDate(item.getDeckUpdateDate()));
ImageView cardImage = helper.getView(R.id.deck_info_image); ImageView cardImage = helper.getView(R.id.deck_info_image);
long code = item.getDeckCoverCard1(); long code = item.getDeckCoverCard1();
......
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