I have a ListView and a EditText. How can I filter ListView data when typing on EditText?
Search a listview based on input in EditText
public class MainActivity extends Activity {
private ListView lv,lv2;
private EditText et;
String listview_array[]={"01634 ABOHAR","080 Bangalore","011 Delhi","Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "1234", "iPhone 4S", "Samsung Galaxy Note 800", "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};
private ArrayList array_sort = new ArrayList();
int textlength = 0;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.ListView01);
lv2 = (ListView) findViewById(R.id.ListView02);
et = (EditText) findViewById(R.id.EditText01);
lv.setAdapter(new ArrayAdapter(this,
android.R.layout.simple_list_item_1, listview_array));
int x= lv.getHeaderViewsCount ();
System.out.println("x========"+x);
lv.setAdapter(new ArrayAdapter
(MainActivity.this,
android.R.layout.simple_list_item_1, listview_array));
et.addTextChangedListener(new TextWatcher()
{
public void afterTextChanged(Editable s)
{
// Abstract Method of TextWatcher Interface.
}
public void beforeTextChanged(CharSequence s,
int start, int count, int after)
{
// Abstract Method of TextWatcher Interface.
}
public void onTextChanged(CharSequence s,
int start, int before, int count)
{
textlength = et.getText().length();
array_sort.clear();
for (int i = 0; i < listview_array.length; i++)
{
if (textlength <= listview_array[i].length())
{
String s2= et.getText().toString();
if(listview_array[i].toString().contains(et.getText().toString()))
{
array_sort.add(listview_array[i]);
}
}
}
lv.setAdapter(new ArrayAdapter
(MainActivity.this,
android.R.layout.simple_list_item_1, array_sort));
}
});
}
}
For search in custom listview based on class item refer the link implement search on a custom listview. Modify it according to your needs.