Я ищу способ фильтрации моих данных в RecyclerView, при котором состояние данного представления не влияет на другое представление при применении фильтра. Практически у меня есть эта проблема: 1. Я добавляю «Martins» в свой список друзей, нажимая на кнопку «Добавить» (image msSxq.png) в списке без фильтра
Я выполняю поиск и получаю следующее (изображение FGSwF.png): список после выполнения поискового действия
Затем ясно, что, как Действие seraching выполнено, содержимое моего списка изменяется, а затем новые элементы занимают место старых элементов и возвращают состояние старых элементов!
Я ищу способ избежать этого. Я пытался прочитать несколько постов на похожую тему, но ничего (Пример ссылки: Как отфильтровать RecyclerView с помощью SearchView )
Спасибо за помощь!
Редактировать : 07/02/2020 - onBindViewHolder и код фильтрации
onBindViewHolder (в моем пользовательском адаптере)
@Override
public void onBindViewHolder(@NonNull final FriendAdapterViewHolder holder, int position) {
String mUsernameString = suggestionList.get(position);
String mModUsernameString = suggestionList.get(position) + "_@chatter";
holder.username.setText(mUsernameString);
holder.mod_username.setText(mModUsernameString);
}
методы фильтрации (всегда в моем адаптере)
@Override
public Filter getFilter() {
return friendFilter;
}
private Filter friendFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
ArrayList<String> listFiltered = new ArrayList<>();
if (fullSuggestionList != null) {
if (constraint == null || constraint.length() == 0) {
listFiltered.addAll(fullSuggestionList);
} else {
String searchTextLowerCase = constraint.toString().toLowerCase().trim();
for (String item : fullSuggestionList) {
if (item.toLowerCase().contains(searchTextLowerCase)) {
listFiltered.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = listFiltered;
return results;
} else {
return null;
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if(results.values != null) {
suggestionList.clear();
suggestionList.addAll((ArrayList<String>) results.values);
notifyDataSetChanged();
}
}
};
И, наконец, в моей деятельности, где я выполняю поисковое действие
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (adapter.getCompleteItemList() != null) {
adapter.getFilter().filter(newText);
}
return false;
}
});