android - Recyclerview 未更新 searchview 文本更改
问题描述
朋友们,我有一个edittext,它的作用类似于searchview。在文本更改时,它正在获取数据并存储在filterdNames 中,但它没有更新recyclerview。请帮助,我是andriod 的新手。这是我的 recyclerview 适配器代码-
public class MyCategoryAdaptercheckbox extends RecyclerView.Adapter<MyCategoryAdaptercheckbox.ViewHolder> {
List<GetMyCategoryAdapter> getMyCategoryAdapter;
Context context;
List<String> category_name;
GetMyCategoryAdapter getMyCategoryAdapter1;
public MyCategoryAdaptercheckbox(List<GetMyCategoryAdapter> getMyCategoryAdapter, Context context, List<String> category_name) {
this.getMyCategoryAdapter = getMyCategoryAdapter;
this.context = context;
this.category_name = category_name;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
if (viewHolder instanceof ViewHolder){
}
getMyCategoryAdapter1 = getMyCategoryAdapter.get(i);
((ViewHolder) viewHolder).tv_categorytitle.setText(getMyCategoryAdapter1.getC_name());
((ViewHolder) viewHolder).tv_categoryid.setText(getMyCategoryAdapter1.getC_id());
((ViewHolder) viewHolder).gt= getMyCategoryAdapter1;
}
public void filterList(ArrayList<String> filterdNames) {
this.category_name = filterdNames;
notifyDataSetChanged();
}
}
这是我的 GetMyCategoryAdapter 类代码 -
public class GetMyCategoryAdapter {
String c_name,c_id;
public String getC_name() {
return c_name;
}
public void setC_name(String c_name) {
this.c_name = c_name;
}
public String getC_id() {
return c_id;
}
public void setC_id(String c_id) {
this.c_id = c_id;
}
}
这是片段代码 -
searchView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
//after the change calling the method and passing the search input
filter(editable.toString());
}
});
private void filter(String text) {
//new array list that will hold the filtered data
ArrayList<String> filterdNames = new ArrayList<>();
//looping through existing elements
for (String s : category_name) {
//if the existing elements contains the search input
if (s.toLowerCase().contains(text.toLowerCase())) {
//adding the element to filtered list
filterdNames.add(s);
}
}
//calling a method of the adapter class and passing the filtered list
((MyCategoryAdaptercheckbox) MyAdapter).filterList(filterdNames);
}
解决方案
问题出在filterList
方法上:你更新category_name
,但不是getMyCategoryAdapter
(在 中使用onBindViewHolder
)。尝试改变getMyCategoryAdapter
之前notifyDataSetChanged
推荐阅读
- angular - 表单提交与角度材料
- python - 包含 keras 模型的 deepcopy 类
- python - 使用 featuretools 指定有趣的变量不起作用
- swift - 如何使用 collectionview 将高质量图像发送到另一个视图
- delphi - 如何在肥皂应用程序中设置 TXSDateTime
- python - PyAutoGUI:如何在 Excel 中切换选择?
- javascript - 错误:SQLITE_ERROR:没有这样的列:未定义
- ffmpeg - 如何使用 FFMPEG 正确裁剪和缩放?
- python - Pandas Timestamp(year=2011, month=8, day=1) 返回一个月的最后一天
- c# - 查找集合中可以被另一个集合的数字整除的所有数字