I am having a ListView and I have inserted values using BaseAdapter, but I realized that to search we have to use ArrayAdapter it working fine with the help of getfilter().but when i am going with BaseAdapter using getfilter() That Time Created Problem because getfilter()not supported in BaseAdapter You need to make custom getfilter().
1)Create EditTextView in XML file For Enter The Elements you want to Search.
<EditText android:id=”@+id/inputSearch”
android:layout_width=”fill_parent”
android:gravity=”center”
android:layout_height=”wrap_content”
android:hint=”Search User”/>
2)Bind This Id in JAVA file an Perform addTextChangedListener event.
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
mAdapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub+
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
getfilter() are not supported in BaseAdapter.so you need to Custom create the getfilter method.
3)you need to implemented BaseAdapter using Filterable.it will create override methods.
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings(“unchecked”)
//publishResults also override methods of getfilter
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
listValues = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
//performFiltering also override methods of getfilter
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String dataNames=””;
FilterResults results = new FilterResults();
//FilteredArrayNames is the temp listview for filter char
ArrayList<String> FilteredArrayNames = new ArrayList<String>();
listValues=listValues1;
// perform your search here using the searchConstraint String.
constraint = constraint.toString().toLowerCase();
//if(constraint.toString().trim().length()>0){
for (int i = 0; i < listValues1.size(); i++) {
//listValues1 is also second listvalues arrays
//listValues is first listValues arrays
dataNames = listValues1.get(i);
//getting listValues1 to dataNames which are we enter..
if (dataNames.toLowerCase().contains(constraint.toString().trim())) {
//add enter char to filter listview.
FilteredArrayNames.add(dataNames);
}
}
results.count = FilteredArrayNames.size();
results.values = FilteredArrayNames;
return results;
}
};
return filter;
}
}