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代碼:
//這里實現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實現下拉刷新和上拉加載
- Android中RecyclerView布局代替GridView實現類似支付寶的界面
- Android中RecyclerView實現橫向滑動代碼
- Android RecyclerView實現下拉刷新和上拉加載
- Android項目實戰(zhàn)之仿網易新聞的頁面(RecyclerView )
- Android RecyclerView 上拉加載更多及下拉刷新功能的實現方法
- Android RecyclerView網格布局(支持多種分割線)詳解(2)
- Android中RecyclerView實現多級折疊列表效果(二)
- Android中RecyclerView嵌套滑動沖突解決的代碼片段
相關文章
詳解如何使用Android Studio開發(fā)Gradle插件
這篇文章主要介紹了詳解如何使用Android Studio開發(fā)Gradle插件,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
Android HTTP發(fā)送請求和接收響應的實例代碼
Android HTTP請求和接收響應實例完整的Manifest文件如下,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-06-06
實例解析Android ImageView的scaleType屬性
通過本文給大家介紹ImageView這個控件的一些使用方法,以及其最重要的一個屬性: scaleType,對imageview的scaletype相關知識感興趣的朋友一起學習吧2016-01-01
使用IntelliJ IDEA 配置安卓(Android)開發(fā)環(huán)境的教程詳解(新手必看)
這篇文章主要介紹了使用IntelliJ IDEA 配置安卓(Android)開發(fā)環(huán)境的教程詳解(新手必看),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Android中實現ProgressBar菊花旋轉進度條的動畫效果
大家在一些頁面經常會遇到加載中需要顯示一個加載動畫,像旋轉的菊花旋轉的圈圈動畫效果,本文通過實例代碼給大家講解下,需要的朋友參考下吧2021-09-09

