Можно создать 2 arrayList в которых будут отфильтрованные элементы и копия всех элементов. Как только пользователь сотрет свой запрос мы заполняем массив из массива с копией. Пример:
public class ItemAdapter extends RecyclerView.Adapter<ItemViewHolder> {
private List<Item> mItemList = new ArrayList<>();
private List<Item> mItemsCopy = new ArrayList<>();
/**
* Фильтрует отображаемые пользователю данные при вводе текста в поиск
*
* @param query the query
*/
void filter(String query) {
mItemList.clear();
if (query.isEmpty()) {
mItemList.addAll(mItemsCopy);
} else {
query = query.toLowerCase();
for (Item item : mItemsCopy) {
if (item.getUserName().toLowerCase().contains(query)) {
mItemList.add(item);
}
}
}
notifyDataSetChanged();
}
На
EditText вешаем text watcher и вызываем в onTextChanged метод filter у адаптера и передаем то что ввел пользователь.
Весь исходник моего адаптера