- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有搜索操作的操作栏菜单项。我有一个 recyclerview,它从 pagedlistadapter 加载 pagedlist 的地方绑定(bind)数据。我需要过滤适配器数据白色搜索 View 文本更改,就像我们在其他适配器中所做的那样
我做过这样的事情,但是没有用。
编辑:
这是我用于适配器的完整代码
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);
}
};
}
}
最佳答案
问题是,如果您将过滤器 {} 应用于 PagedList,您将拥有 List 并且在
submitList((PagedList<Product>) results.values);
它会因为类型不同而崩溃。
你想要的行为是可能的,但在“paged recycler”的情况下是不同的
在简单的 RecyclerView 中,您可以在其中加载和“存储”数据,以便您可以对其进行过滤。如果用户更改页面或向下滚动,您只需添加更多数据,然后再次过滤它(但您还必须使用应用过滤器从服务器获取并添加适配器数据,以防它们不存在于适配器中)。
在分页列表中,在我看来,如果你需要过滤它,你应该在你的DataSource中添加过滤器并使用这个过滤后的数据源创建新的PagedList(过滤器应用于loadInitial和loadRange方法中的api或数据库调用)。因此,当它向下滚动(或加载新页面)时,您将从过滤页面加载项目。
希望对你有帮助
关于具有可过滤功能的 Android PagedListAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57390812/
我想使用通用类作为 PagingList<> 中的项目 interface GenericInterface{} class GenericImplementation: GenericInterfa
我有一个带有搜索操作的操作栏菜单项。我有一个 recyclerview,它从 pagedlistadapter 加载 pagedlist 的地方绑定(bind)数据。我需要过滤适配器数据白色搜索 Vi
我正在使用 PagedListAdapter 并且必须在屏幕恢复时重新加载数据。 对于这种情况,我不想在加载数据时清除适配器并将其显示为空或占位符。 我想显示以前的数据,并在收到新数据后用差异更新它。
我已经使用 ItemKeyedDataSource 实现了新的 PagedListAdapter。我的列表包含带有“赞”按钮的提要项目。单击“喜欢”按钮应刷新该项目。 为了在点击“赞”按钮时刷新我的列
我有一个 Android 待办事项列表应用程序,其中包含使用 Room 访问的 SQLite 数据库。然后我想在抽屉导航中列出可用列表。所以我使用了分页库。现在 RecyclerView 是空的,我不
本主题的小故事:应用程序在确认后仅通过对话框更新单击行的值。在房间数据库上使用分页方案。 当一个项目被添加或删除时,最新的数据集被获取并传递给 submitList 方法,然后所有的变化都会被看到并且
我正在使用 Room 和 Paging 库来显示类别。 我的实体: @Entity(tableName = Database.Table.CATEGORIES) data class Category
我正在使用新的 Paging 库从休息 API 加载分页数据,但我无法理解如何在新数据缓存在 Room 后继续加载它。目前,我有一个 PagedListAdapter,它通过使用边界回调从 API 加
我正在使用 Paging library . 目前,我想按 PagedListAdapter 中的描述对项目进行排序(使用 SortList ),但我还没有想出如何去做。 使用 PagedListAd
每次我调用无效数据时,我的 DIFF_UTIL 都不会被使用。日志未显示,整个列表已更新为新数据,导致屏幕移动位置等。不确定这里的问题是什么。 我有PagedListAdapter与 LiveData
我有一个使用 PagedListAdapter 的 RecyclerView。我想刷新列表(即从我的 DataSource 获取数据)并自动滚动到顶部。 这是我的 RecyclerView:
我想使用 android.arch.paging 组件在列表中 header 。 通常这很容易,只需为 RecyclerView 适配器添加不同的类型来处理和创建包含标题的项目的新列表。 但是对于分页
我有 PagedListAdapater: class TrackedActivityAdapter constructor(diffUtilCallback: DiffUtil.ItemCallba
我正在使用来自 Android 分页库的 PagedListAdapter 和 PageKeyedDataSource。我想在屏幕旋转后恢复 recyclerview 位置。我怎样才能做到这一点?Li
我有一个带有 PagedListAdapter 的回收站 View 。 在 onCreate 我有这段代码: viewModel.recentPhotos.observe(this, Observe
我使用 Paging with Retrofit 从 REST API 加载通知数据列表。 当我按下通知项的删除按钮时,我调用删除 API 将其删除。删除 API 响应成功后从 PagedListAd
我一直在试验 PagedListAdapter,但无法弄清楚如何正确恢复适配器位置。 最后一次尝试是从当前列表中保存 lastKey。 override fun onSaveInstanceState
通常在 RecyclerView 上,当 RecyclerView 上没有项目时,我会显示一个空 View ,因为我控制对 RecyclerView 的所有更新通过 notify 方法,这非常简单,但
我基于 PagedListAdapter 实现了分页功能,并且我已经过检查工作正常。我尝试实现以如果 ListAdapter 项为空则显示 EmptyHolder 为特色。在调用 submitList
我使用 android.arch.paging.PagedListAdapter 和 数据库作为 RecyclerView 中显示项目的数据源. 每个项目都有日期。我还在 override fun o
我是一名优秀的程序员,十分优秀!