国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android RecyclerView添加搜索過濾器的示例代碼

2019-10-22 18:16:55
字體:
來源:轉載
供稿:網友

搜索過濾功能,相信大家都能用到,一般都是針對列表進行過濾的。下面給大家提供一種過濾列表的方法。

老規矩,先上圖

Android,添加搜索過濾器,搜索過濾器,RecyclerView

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) {       //這里根據需求,添加匹配規則       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代碼:

//這里實現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() {    //執行過濾操作    @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) {       //這里根據需求,添加匹配規則       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監聽

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) {   }  });

好了,到這里就結束了??。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漾濞| 淮安市| 安岳县| 望都县| 建湖县| 南平市| 绥宁县| 大悟县| 平湖市| 光山县| 观塘区| 克山县| 东乡县| 湘潭县| 金塔县| 泽库县| 精河县| 蒙自县| 大邑县| 东明县| 兴义市| 杭州市| 南江县| 台北县| 库伦旗| 南丹县| 朝阳县| 邵东县| 登封市| 剑川县| 读书| 娄烦县| 通道| 桓台县| 老河口市| 旬阳县| 汝南县| 广西| 垣曲县| 连城县| 梁平县|