fpo*_*pic 12 android-fragments searchview android-toolbar android-recyclerview
我需要在我的Android应用程序中实现搜索功能,它使用工具栏,SlidingTabLayout和保存片段的ViewPager.在每个片段中都有一个包含项目列表的RecyclerView.
RecyclerView数据是在单独的类(DataAccess.java)中静态定义的,这些列表会更新,只需通过调用(不传递新数据)即可刷新RecyclerView
mRecyclerView.getAdapter().notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法临时过滤RecyclerView而不更改数据,并在用户按下工具栏内的返回按钮后删除过滤器并显示初始列表.
在按工具栏菜单中的搜索图标之前:

因此,当用户输入"Josip ..."时,过滤器将处于活动状态

在他按下SearchView中的X按钮后,用户将获得与之前相同的数据而不使用过滤器.
@Override
public boolean onQueryTextChange(String newText) {
// filter data (temporary remove all items from DataAccess.list that don't .startsWith(newText)
}
@Override
public boolean onQueryTextSubmit(String query)
// Doesn't help if I revert deleted items here
}
Run Code Online (Sandbox Code Playgroud)
小智 23
@Override
public boolean onQueryTextSubmit(String query){
((ItemAdapter) myRecList.getAdapter()).setFilter(query)
}
Run Code Online (Sandbox Code Playgroud)
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> {
private List<String> visibleObjects;
private List<String> allObjects;
.....
public void flushFilter(){
visibleObjects=new ArrayList<>();
visibleObjects.addAll(allObjects);
notifyDataSetChanged();
}
public void setFilter(String queryText) {
visibleObjects = new ArrayList<>();
constraint = constraint.toString().toLowerCase();
for (String item: allObjects) {
if (item.toLowerCase().contains(queryText))
visibleObjects.add(item);
}
notifyDataSetChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16376 次 |
| 最近记录: |