Search code examples
androidadapter

Implements filterable interface for adapter that is dynamically populated


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));
    }

}


Solution

  • 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!