最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android RecyclerView添加搜索過(guò)濾器的示例代碼

 更新時(shí)間:2018年01月17日 08:35:00   作者:人言落日是天涯  
本篇文章主要介紹了Android RecyclerView添加搜索過(guò)濾器的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

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

老規(guī)矩,先上圖

RecycleView搜索過(guò)濾器-getFilter()

Android 提供了Fileterable類,可以通過(guò)過(guò)濾器(條件)來(lái)過(guò)濾數(shù)據(jù)。通常,getFilter()方法必須在提供過(guò)濾條件的適配器類中被重寫,以通過(guò)列表進(jìn)行搜索。下面是通過(guò)getFilter(),來(lái)過(guò)濾數(shù)據(jù)。

@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) {
       //這里根據(jù)需求,添加匹配規(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;
     //刷新數(shù)據(jù)
     notifyDataSetChanged();
    }
   };
  }

完整Adapter代碼:

//這里實(shí)現(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) {
   //這里也是過(guò)濾后的list
   holder.tv.setText(mFilterList.get(position));
  }

  @Override
  public int getItemCount() {
   //注意這里需要是過(guò)濾后的list
   return mFilterList.size();
  }
  //重寫getFilter()方法
  @Override
  public Filter getFilter() {
   return new Filter() {
    //執(zhí)行過(guò)濾操作
    @Override
    protected FilterResults performFiltering(CharSequence charSequence) {
     String charString = charSequence.toString();
     if (charString.isEmpty()) {
      //沒(méi)有過(guò)濾的內(nèi)容,則使用源數(shù)據(jù)
      mFilterList = mSourceList;
     } else {
      List<String> filteredList = new ArrayList<>();
      for (String str : mSourceList) {
       //這里根據(jù)需求,添加匹配規(guī)則
       if (str.contains(charString)) {
        filteredList.add(str);
       }
      }

      mFilterList = filteredList;
     }

     FilterResults filterResults = new FilterResults();
     filterResults.values = mFilterList;
     return filterResults;
    }
    //把過(guò)濾后的值返回出來(lái)
    @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);
   }
  }
 }

數(shù)據(jù)初始化部分

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

設(shè)置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) {

   }
  });

好了,到這里就結(jié)束了��。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

班玛县| 石柱| 夏邑县| 内江市| 德清县| 调兵山市| 玛曲县| 凤阳县| 揭西县| 千阳县| 乳源| 法库县| 横峰县| 始兴县| 安宁市| 安丘市| 类乌齐县| 惠东县| 汪清县| 平塘县| 蓬莱市| 泊头市| 榆社县| 兴和县| 随州市| 油尖旺区| 鹤壁市| 嘉善县| 平安县| 浙江省| 天柱县| 四平市| 陵川县| 仁布县| 阿巴嘎旗| 眉山市| 阿瓦提县| 梓潼县| 苍山县| 阳城县| 汪清县|