Search in ListView with EditText

前端 未结 3 1034
栀梦
栀梦 2020-11-27 07:58

I have a ListView. Each row of it contains 3 TextView\'s and 2 Button\'s. Above it I have an EditText. How can I filter m

3条回答
  •  难免孤独
    2020-11-27 08:31

    The below code uses a custom list adapter.

    I have 3 text views displayed using a custom list adapter. I made a sample which does search based on the input in editext at the top of the list. Based on the input comparision is made with data in textview1 of each row and data is filtered and displayed accordingly.

    You can have other items in listview row and the search can be based on texview1/textview2 or textview3. Modify the below according to your needs.

    public class MainActivity extends Activity {
    ArrayList mTemp=new ArrayList();
    ArrayList mPostingData=new ArrayList();
    ArrayList< NewData> mOri = new ArrayList();
    
    Myadapter ma;
    EditText search;
    
    NewData nd;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    
        for(int i = 0; i < 20; i++)
        {
    
            nd=new NewData();
    
            nd.newDatacus.put(NewData.TAG_CUSTOMER_CODE, "i"+i);
            nd.newDatacus.put(NewData.TAG_CUSTOMER_NAME, "a"+i);
            nd.newDatacus.put(NewData.TAG_CUSTOMER_MOBILE, "number");
            nd.newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS, "address");
            mOri.add(nd);
        }
    
        ma= new Myadapter(MainActivity.this);
        mPostingData=mOri;
        mTemp=mOri;
        ListView lv= (ListView) findViewById(R.id.list);
        lv.setAdapter(ma);
        search= (EditText) findViewById(R.id.search);
        search.addTextChangedListener(new TextWatcher() {
    
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                ma.getFilter().filter(s);
                ma.notifyDataSetChanged();
    
            }
    
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
    
    
            }
    
            public void afterTextChanged(Editable s) {
            }
        });
    
    
    }
    
    
    
    class Myadapter extends ArrayAdapter
    {
        LayoutInflater mInflater;
    
    
        public void setData(ArrayList mPpst) {   
            mPostingData = mPpst;//contains class items data.
        }
    
        @Override
        public Filter getFilter() {
            return new Filter() {
                @Override
                protected void publishResults(CharSequence constraint, FilterResults results) {
                    if (results != null && results.count >= 0) {
                        setData((ArrayList) results.values);//if results of search is null set the searched results data
                    } else {
                        setData(mOri);// set original values
                    }
    
                    notifyDataSetInvalidated();
                }
    
    
    
                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    FilterResults result = new FilterResults();
                    if (!TextUtils.isEmpty(constraint)) {
                        constraint = constraint.toString().toLowerCase();
                        ArrayList foundItems = new ArrayList();
                        if(mTemp!=null)
                        {
                            for(int i=0;i

    Main.xml

    
    

    
    
    
    

    List.xml //xml to inflate

    
    
    
    
    
    

    NewData class

     public class NewData {
      public static final String TAG_CUSTOMER_CODE = "customer_code";
      public static final String TAG_CUSTOMER_NAME = "customer_name";
      public static final String TAG_CUSTOMER_MOBILE = "customer_mobile";
      public static final String TAG_CUSTOMER_ADDRESS = "customer_address";
    
      Hashtable newDatacus=new Hashtable();
    
      public NewData()
      {
    
        newDatacus.put(NewData.TAG_CUSTOMER_CODE,new String());
        newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String());
        newDatacus.put(NewData.TAG_CUSTOMER_NAME,new String());
        newDatacus.put(NewData.TAG_CUSTOMER_MOBILE,new String());
        newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String());
    
    
    
    
     }
    }
    

提交回复
热议问题