Reputation: 433
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
Reputation: 164
Try this
public boolean onQueryTextChange(String newText) { myAdapter.getFilter().filter(newText);
Listview.setAdapter(myAdapter);return false; }
Upvotes: 1