У меня есть RecyclerView, который возвращает список объектов во фрагмент, я хочу, чтобы фрагмент отображал только объекты, которые имеют определенное значение в одной из своих переменных. Как я могу это сделать?
Вот как я называю свой адаптер на фрагменте:
RecyclerView recyclerview = view.findViewById(R.id.list);
if (recyclerview != null) {
Context context = view.getContext();
adapter = new MyHospitalHistoryRecyclerViewAdapter(DummyContent.ITEMS, mListener);
recyclerview.setAdapter(adapter);
}
return view;
DummyContent.ITEMS — это список типа DummyItems.
Кто-нибудь знает, как я могу это сделать? Я проверил все, что знаю




Попробуйте добавить логику фильтра в адаптер, например:
class MyAdapter extends RecyclerView.Adapter<MyViewHolder> implements Filterable {
private NewFilter mFilter = new NewFilter();
private List<MyData> mItems;
private List<MyData> mFiltered = new ArrayList<>(); // <--- use this collection in all required getItemsCount and onBindViewHolder methods
@Override
public Filter getFilter {
return mFilter;
}
public class NewFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
mFiltered .clear();
final FilterResults results = new FilterResults();
if (charSequence.length() == 0){
mFiltered .addAll(mItems);
}else{
final String filterPattern =charSequence.toString().toLowerCase().trim();
for(MyData item: mItems) {
if (item.getMyProperty().toLowerCase().contains(filterPattern)){ // replace this condition with actual you need
mFilteredItems.add(item);
}
}
}
results.values = mFilteredItems;
results.count = mFilteredItems.size();
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
this.mAdapter.notifyDataSetChanged();
}
}
Затем вы можете использовать его во фрагменте только с помощью:
adapter.getFilter().filter("hello");
Строка выше обновляет список только элементами, которые содержат «привет» в свойстве «myProperty».
Я пробовал фильтры раньше, но я действительно не мог заставить их работать, ваша логика фильтра выглядит нормально, но она не отображается .filter на объекте адаптера, чего-то не хватает?
@Skepller, я пропустил вызов одного метода. Попробуйте adapter.getFilter().filter("hello");, пожалуйста. Извините за введение в заблуждение.
Хорошо, это сработало с небольшими изменениями в фильтре, большое спасибо за помощь!
@Skepller, с наилучшими пожеланиями
попробуйте создать пустой
Listи заполните его своими конкретными значениями, используяIfиElse, после чего установите его в свойadapter