Android RecyclerView添加搜索過濾器的示例代碼
搜索過濾功能,相信大家都能用到,一般都是針對列表進行過濾的。下面給大家提供一種過濾列表的方法。
老規(guī)矩,先上圖
RecycleView搜索過濾器-getFilter()
Android 提供了Fileterable類,可以通過過濾器(條件)來過濾數據。通常,getFilter()方法必須在提供過濾條件的適配器類中被重寫,以通過列表進行搜索。下面是通過getFilter(),來過濾數據。
@Override public Filter getFilter() { return new Filter() { @Override protected FilterResults performFiltering(CharSequence charSequence) { String charString = charSequence.toString(); if (charString.isEmpty()) { mFilterList = mSourceList; } else { List<String> filteredList = new ArrayList<>(); for (String str : mSourceList) { //這里根據需求,添加匹配規(guī)則 if (str.contains(charString)) { filteredList.add(str); } } mFilterList = filteredList; } FilterResults filterResults = new FilterResults(); filterResults.values = mFilterList; return filterResults; } @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) { mFilterList = (ArrayList<String>) filterResults.values; //刷新數據 notifyDataSetChanged(); } }; }
完整Adapter代碼:
//這里實現(xiàn)Filterable接口 class TitleAdapter extends RecyclerView.Adapter<TitleAdapter.TitleHolder> implements Filterable { private List<String> mSourceList = new ArrayList<>(); private List<String> mFilterList = new ArrayList<>(); private void appendList(List<String> list) { mSourceList = list; //這里需要初始化filterList mFilterList = list; } @Override public TitleHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new TitleHolder(LayoutInflater.from(FastScrollRecyclerActivity.this).inflate(R.layout.item_textview_view, parent, false)); } @Override public void onBindViewHolder(TitleHolder holder, int position) { //這里也是過濾后的list holder.tv.setText(mFilterList.get(position)); } @Override public int getItemCount() { //注意這里需要是過濾后的list return mFilterList.size(); } //重寫getFilter()方法 @Override public Filter getFilter() { return new Filter() { //執(zhí)行過濾操作 @Override protected FilterResults performFiltering(CharSequence charSequence) { String charString = charSequence.toString(); if (charString.isEmpty()) { //沒有過濾的內容,則使用源數據 mFilterList = mSourceList; } else { List<String> filteredList = new ArrayList<>(); for (String str : mSourceList) { //這里根據需求,添加匹配規(guī)則 if (str.contains(charString)) { filteredList.add(str); } } mFilterList = filteredList; } FilterResults filterResults = new FilterResults(); filterResults.values = mFilterList; return filterResults; } //把過濾后的值返回出來 @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) { mFilterList = (ArrayList<String>) filterResults.values; notifyDataSetChanged(); } }; } class TitleHolder extends RecyclerView.ViewHolder { TextView tv; public TitleHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.id_tv_test); } } }
數據初始化部分
private String[] str = new String[]{ "apple", "apple juice", "apple pie", "abalone", "bread", "brandy", "Blueberry", "Banana", "chocolate", "cake", "chicken", "cheese", "Durian", "Dim Sam", "Dumpling", "duck", "egg", "English muffin", "eggplant", "French toast", "fish", "fig", "fruit" };
private List<String> mList = new ArrayList<>(); private void initList() { for (int i = 0; i < str.length; i++) { mList.add(str[i]); } }
設置RecycleView和EditText監(jiān)聽
RecyclerView rv = (RecyclerView) findViewById(R.id.id_rv); LinearLayoutManager manager = new LinearLayoutManager(this); rv.setLayoutManager(manager); final TitleAdapter adapter = new TitleAdapter(); adapter.appendList(mList); rv.setAdapter(adapter); EditText et = findViewById(R.id.id_et); et.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence sequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence sequence, int i, int i1, int i2) { adapter.getFilter().filter(sequence.toString()); } @Override public void afterTextChanged(Editable editable) { } });
好了,到這里就結束了��。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android中使用RecyclerView實現(xiàn)下拉刷新和上拉加載
- Android中RecyclerView布局代替GridView實現(xiàn)類似支付寶的界面
- Android中RecyclerView實現(xiàn)橫向滑動代碼
- Android RecyclerView實現(xiàn)下拉刷新和上拉加載
- Android項目實戰(zhàn)之仿網易新聞的頁面(RecyclerView )
- Android RecyclerView 上拉加載更多及下拉刷新功能的實現(xiàn)方法
- Android RecyclerView網格布局(支持多種分割線)詳解(2)
- Android中RecyclerView實現(xiàn)多級折疊列表效果(二)
- Android中RecyclerView嵌套滑動沖突解決的代碼片段
相關文章
Jetpack Compose實現(xiàn)列表和動畫效果詳解
這篇文章主要為大家詳細講講Jetpack Compose實現(xiàn)列表和動畫效果的方法步驟,文中的代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2022-06-06android BottomSheetDialog新控件解析實現(xiàn)知乎評論列表效果(實例代碼)
BottomSheetDialog是一個自定義的從底部滑入的對話框,這篇文章主要介紹了android BottomSheetDialog新控件解析實現(xiàn)知乎評論列表效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04Android實現(xiàn)H5與Native交互的兩種方式
Android實現(xiàn)H5頁面和Native頁面交互的方法有兩種,一種是Url攔截的方法,另一種是JavaScript注入,下面來通過這篇文章分別講解。有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12Android音視頻開發(fā)之MediaPlayer使用教程
Android多媒體框架支持播放提供了MediaPlayerAPI,可以通過MediaPlayer來實現(xiàn)媒體文件播放??梢哉fMediaPlayer是非常方便使用的多媒體播放器。本文將詳細講解MediaPlayer的使用,需要的可以參考一下2022-04-04使用CountDownTimer類輕松實現(xiàn)倒計時功能
Android中有個countDownTimer類,從名字上就可以看出來,它的功能是記錄下載時間,將后臺線程的創(chuàng)建和Handler隊列封裝成為了一個方便的調用。2014-07-07