How to keep original data for an adapter that is dynamically populated, need to snapshot data just before search request by the user on listview> I'm implementing Filterable interface in myadapter, and cannot copy original data on constructor as my list is already empty and shall be populated later.
private Filter filteredList = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
List<ITEMMODEL> filtered = new ArrayList<>();
if (charSequence == null || charSequence.length() == 0) {
filtered.addAll(itemsFull);
} else {
for (ITEMMODEL item : itemsFull) {
Log.d(TAG,item.getName());
if (item.getName().toLowerCase().contains(charSequence.toString().toLowerCase().trim())) {
filtered.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filtered;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
items.clear();
items.addAll((List)filterResults.values);
notifyDataSetChanged();
}
};
public void onResume() {
super.onResume();
Cursor cursor = getActivity().getContentResolver().query(ItemsProvider.CONTENT_URI,null,null,null,null);
itemListAdapter.clear();
while ((cursor.moveToNext())) {
itemListAdapter.addItem(itemFromCursor(cursor));
}
}
Try inside the adapter, modifiy clear() method like this:
@Override
public void clear() {
super.clear();
itemsFull.clear();
}
and addItem() method to add item to both lists (items and itemsFull). Hope that helps!