在RecyclerView中搜索显示的对象列表可以通过以下步骤实现:
下面是一个示例代码:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements Filterable {
private List<MyObject> originalList; // 原始数据源
private List<MyObject> filteredList; // 过滤后的数据源
// 构造方法和ViewHolder等其他方法省略
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
String keyword = constraint.toString().toLowerCase();
if (keyword.isEmpty()) {
results.values = originalList;
results.count = originalList.size();
} else {
List<MyObject> filteredObjects = new ArrayList<>();
for (MyObject object : originalList) {
// 根据搜索关键字过滤数据
if (object.getName().toLowerCase().contains(keyword)) {
filteredObjects.add(object);
}
}
results.values = filteredObjects;
results.count = filteredObjects.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredList = (List<MyObject>) results.values;
notifyDataSetChanged();
}
};
}
}
在Activity或Fragment中,可以通过以下方式使用搜索功能:
EditText searchEditText = findViewById(R.id.search_edit_text);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
MyAdapter adapter = new MyAdapter(originalList);
recyclerView.setAdapter(adapter);
searchEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});
这样,当用户在搜索框中输入关键字时,RecyclerView会根据关键字过滤显示相应的对象列表。
领取专属 10元无门槛券
手把手带您无忧上云