Android 之EditText自动检索Listview中的数据

1.直接上代码吧。

public class MainActivity extends Activity {
    
    
    private ListView mlistview;
    private EditText medittext;
    List<PersionInfo>lists=new ArrayList<PersionInfo>();
    private PersionInfoAdapter mAdapter;
    //造数据


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mlistview=(ListView) findViewById(R.id.mlistview);
        medittext=(EditText) findViewById(R.id.medittext);
        //造数据
        lists.add(new PersionInfo("易皇星", "测试数据"));
        lists.add(new PersionInfo("易皇星", "测试数据"));
        lists.add(new PersionInfo("测试", "测试数据"));
        lists.add(new PersionInfo("测试", "测试数据"));

        //
        mAdapter=new PersionInfoAdapter(this, lists);
        mlistview.setAdapter(mAdapter);

        //
        medittext.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                filterData(s.toString());

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });
    }




    class PersionInfoAdapter extends BaseAdapter{
        private  List<PersionInfo>lists;
        private Context context;
        private LayoutInflater imInflater;


        public PersionInfoAdapter(Context context,List<PersionInfo>lists){
            this.context=context;
            this.lists=lists;
            imInflater = LayoutInflater.from(context);
        }
        //刷新adapter方法
        public void updateListView(List<PersionInfo> newlists){
            lists=newlists;  //重新赋值
            notifyDataSetChanged();  //刷新
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return lists.size();
        }

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //这里就不进行优化了
            View inflate = imInflater.inflate(R.layout.listview_item, null);
            TextView tv_name=(TextView) inflate.findViewById(R.id.tv_name);
            TextView tv_hobby=(TextView) inflate.findViewById(R.id.tv_hobby);

            PersionInfo persionInfo = lists.get(position);
            tv_name.setText(persionInfo.getName());
            tv_hobby.setText(persionInfo.getHobby());

            return inflate;
        }

    }

    /**
     * 根据输入框中的值来过滤数据并更新ListView
     * @param filterStr
     */
    private void filterData(String mesg){
        //创建新的集合
        List<PersionInfo> newlists=new ArrayList<PersionInfo>();
        if(TextUtils.isEmpty(mesg)){
            newlists=lists;
        }else {
            newlists.clear();
            //根据lists集合中的对象字段名过滤
            for(PersionInfo sortModel : lists){
                String name = sortModel.getName();
                if(name.indexOf(mesg.toString()) != -1 ){
                //重新添加到新的集合中
                    newlists.add(sortModel);
                }
            }
        }
        // 不管怎么样都要刷新
        mAdapter.updateListView(newlists);
    }

}

2.效果图。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/jky_yihuangxing/article/details/51107430