Mohammed Nasrullah
Mohammed Nasrullah

Reputation: 433

Filter Adapter not displaying the filter results Android

My listview will not filter the results on the activity. when i type the the vales get filtered successfully in my Adapter. i checked it by running the log in the below code. in the log it displays the filtered values. But i dont see any changes in the activity

@Override
    protected void publishResults(CharSequence constraint,
                                  FilterResults results) {
        listData = (ArrayList<ContactLists>) results.values;
        Log.e("FILTERED: ",results.values.toString()); // filter results appear here
        notifyDataSetChanged();
    }

but my activity does not filter the listview. my activity code below

ContactListAdapter myAdapter;
ArrayList<ContactLists> listData;
...
...
public void getContacts(){

    listData = getListData();
    myAdapter = new ContactListAdapter(this, listData);
    listView = (ListView) findViewById(R.id.custom_list);
    listView.setAdapter(new ContactListAdapter(this, listData));
}

public boolean onQueryTextChange(String newText) {
    myAdapter.getFilter().filter(newText);
    return false;
}

@Override
public boolean onQueryTextSubmit(String query) {

    return false;
}

CustomAdapter

ArrayList<ContactLists> listData;
ArrayList<ContactLists> mStringFilterList;
ValueFilter valueFilter;
...
...
 public Filter getFilter() {
    if (valueFilter == null) {
        valueFilter = new ValueFilter();
    }
    return valueFilter;
}
private class ValueFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {
            ArrayList<ContactLists> filterList = new ArrayList<ContactLists>();
            for (int i = 0; i < mStringFilterList.size(); i++) {
                if ((mStringFilterList.get(i).getName().toUpperCase())
                        .contains(constraint.toString().toUpperCase())) {

                    ContactLists mydata = new ContactLists(mStringFilterList.get(i)
                            .getName(), mStringFilterList.get(i)
                            .getNumber());

                    filterList.add(mydata);
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mStringFilterList.size();
            results.values = mStringFilterList;
        }
        return results;

    }

    @Override
    protected void publishResults(CharSequence constraint,
                                  FilterResults results) {
        listData = (ArrayList<ContactLists>) results.values;
        Log.e("XXXXXXXXX",results.values.toString());
        notifyDataSetChanged();
    }

}

Upvotes: 0

Views: 312

Answers (1)

Mahmoud.M
Mahmoud.M

Reputation: 164

Try this public boolean onQueryTextChange(String newText) { myAdapter.getFilter().filter(newText);
Listview.setAdapter(myAdapter);return false; }

Upvotes: 1

Related Questions