Sirwan Afifi
Sirwan Afifi

Reputation: 10824

android : search in custom listview

I want to populate my list view with custom data, so I created this class that extends BaseAdapter :

public class PersonAdapter extends BaseAdapter{

        List<Person> persons= getDataforListViewList();
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return persons.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return persons.get(arg0);
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {
             if(arg1==null)
             {
                 LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                 arg1 = inflater.inflate(R.layout.listitem, arg2,false);
             }

             TextView Name = (TextView)arg1.findViewById(R.id.txtName);
             TextView PhoneNumber = (TextView)arg1.findViewById(R.id.txtPhone);

             Person person = persons.get(arg0);

             Name.setText(person.name);
             PhoneNumber.setText(person.phoneNumber);

             return arg1;
        }
}

then I'populating my list view this way :

PersonAdapter pe;
@Override
protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            pe=new PersonAdapter();
            ListView personListView = (ListView)findViewById(R.id.listView1);
            personListView.setAdapter(pe);          
            EditText inputSearch=(EditText) findViewById(R.id.inputSearch);
                    txtEditText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub

        }


}

above code works correctly, now I wanna add search functionality for my listview, How can I do that?

Upvotes: 1

Views: 67

Answers (1)

Rod_Algonquin
Rod_Algonquin

Reputation: 26198

You can use the Filter class that will filter each of the data inside the listview using the edittext addTextChangedListener..

 myFilter.addTextChangedListener(new TextWatcher() {

  public void afterTextChanged(Editable s) {
  }

  public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  }

  public void onTextChanged(CharSequence s, int start, int before, int count) {
   dataAdapter.getFilter().filter(s.toString());
  }
  });

you need to create a class that extends Filter.

There is good example here

Upvotes: 1

Related Questions