gpt4 book ai didi

android - 如果搜索查询在搜索 View 中不匹配,如何为回收者 View 设置过滤器

转载 作者:行者123 更新时间:2023-11-29 20:53:47 26 4
gpt4 key购买 nike

如果我们在搜索 View 中输入的项目匹配,此代码工作正常,但如果我们输入一些不匹配的查询...应用程序在 android 中崩溃。

这里 Main_ATMItemList 是返回整个结果列表的列表。请帮助我添加我需要添加的内容,以便即使查询不匹配,代码也能正常工作。

我在适配器类中创建了这个方法

public void setFilter(String queryText) {
visibleObjects = new ArrayList<>();

for (RouteByATMList.Route_ATM item : Main_ATMItemList) {
if (item.ATMNumber.startsWith(queryText))
{
visibleObjects.add(item);

}
}
}

notifyDataSetChanged();
Log.e("dataset changed","dataset changed");
}

最佳答案

需要对RecyclerView.Adapter进行抽象,使其继承Filterable。然后将此抽象子类化为要创建的适配器。

覆盖 getFilter() 方法以实例化 Filter。在 Filter

performFiltering(String constraint) 方法中,引用如何过滤适配器和移动逻辑的示例

您应该在后台线程中进行过滤,因此 FilterableFilterable 在后台线程上进行过滤,并将结果传递到 UI 线程或调用过滤的线程上。

像这样,您可以在一定程度上实现与旧的 ListView 的兼容性。

评论里有人问例子:

public abstract class BaseFilterableRecyclerViewAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> implements Filterable {

private Context mContext;
public BaseFilterableRecyclerViewAdapter(Context context) {
this.mContext = context;
}
public abstract void sort(SortingFilter.Sort sortingStrategy);

}

在扩展类中:

public class ProductAdapter extends BaseFilterableRecyclerViewAdapter<RecyclerView.ViewHolder>{

//------- Other methods ----

@Override
public Filter getFilter() {
return new SortingFilter(mData) {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.values != null) {
int last = mData.size();
mData = (List<? extends Product>) results.values;
notifyItemRangeChanged(mHeaderView == null ? 0 : 1, last);
}
}
};
}


}

关于android - 如果搜索查询在搜索 View 中不匹配,如何为回收者 View 设置过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28336920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com