【发布时间】:2019-08-07 09:08:51
【问题描述】:
我有一个带有搜索操作的操作栏菜单项。我有一个 recyclerview,它绑定来自 pagedlistadapter 的数据,它加载 pagedlist。我需要像在其他适配器中所做的那样,将适配器数据过滤成白色的 searchview 文本更改
我做过类似的事情,但它不起作用。
编辑:
这是我用于适配器的完整代码
public class ProductsRvAdapter extends PagedListAdapter<Product, ProductsRvAdapter.ViewHolder> implements Filterable {
private Context context;
public ProductsRvAdapter(Context context) {
super(DIFF_CALLBACK);
this.context = context;
}
private static DiffUtil.ItemCallback<Product> DIFF_CALLBACK = new DiffUtil.ItemCallback<Product>() {
@Override
public boolean areItemsTheSame(Product oldProduct, Product newProduct) {
return oldProduct.getId() == newProduct.getId();
}
@Override
public boolean areContentsTheSame(Product oldProduct, @NonNull Product newProduct) {
return oldProduct.equals(newProduct);
}
};
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_item_product, viewGroup, false));
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
Product product = getItem(i);
if (product == null) {
viewHolder.clear();
} else {
viewHolder.bind(product);
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
//declare views
public ViewHolder(@NonNull View itemView) {
super(itemView);
//initialize views
}
public void bind(Product product) {
//bind data to views
}
public void clear() {
//clear views data
}
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String query = charSequence.toString();
PagedList<Product> filtered = null;
if (query.isEmpty()) {
filtered = getCurrentList();
} else {
for (Product product : itemList) {
if (product.getProductName().toLowerCase().contains(query.toLowerCase())) {
filtered.add(product);
}
}
}
FilterResults results = new FilterResults();
results.count = filtered.size();
results.values = filtered;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults results) {
submitList((PagedList<Product>) results.values);
}
};
}
}
【问题讨论】:
-
@ManojPerumarath 请检查我的编辑
-
你的 diffutil 回调在哪里,arecontentsame 和 areitemsame
-
数据来自网络还是数据库?
-
@ManojPerumarath 适配器没有过滤数据,因为我更改了 searchview 中的文本。我在 getfilter() 方面做得对吗?
-
@ManojPerumarath 好的,兄弟!灯泡卡西 :)
标签: android android-recyclerview android-paging