Android Studio 开发中的一个小功能 使用TextView搜索ListView

来源:互联网 发布:全境封锁购买 知乎 编辑:程序博客网 时间:2024/05/17 07:48

搜索框设计可以参考http://blog.csdn.net/walker02/article/details/7917392    另外参考http://www.2cto.com/kf/201409/335389.html


//主线程,用于数据准备完成后,更新ListView控件Android系统中的视图组件并不是线程安全的,如果要更新视图,必须在主线程中更新,不可以在子线程中执行更新的操作private Handler handler=new Handler(){    @Override    public void handleMessage(Message msg){        if(msg.what==COMPLETED){            //匹配数据            ListView projectListView=(ListView) findViewById(R.id.dev_list);            //将项目的设备信息显示在dev_list中            projectListView.setAdapter(simpleAdapter);        }    }};



final TextView eSearch=(TextView) findViewById(R.id.etSearch); //搜索框final ImageView ivDeleteText=(ImageView) findViewById(R.id.ivDeleteText);  //清除搜索框叉叉图标//监听叉叉图标的点击事件,清除搜索框ivDeleteText.setOnClickListener(new View.OnClickListener() {    public void onClick(View v) {        eSearch.setText("");    }});eSearch.addTextChangedListener(new TextWatcher() {    @Override    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {        //这个应该是在改变的时候会做的动作吧,具体还没用到过。    }    @Override    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {        //这是文本框改变之前会执行的动作    }    @Override    public void afterTextChanged(Editable editable) {        /**这是文本框改变之后 会执行的动作         * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。         * 所以这里我们就需要加上数据的修改的动作了。         */        if(editable.length()==0){            ivDeleteText.setVisibility(View.GONE);//当文本框为空时,则叉叉图标消失        }else        {            ivDeleteText.setVisibility(View.VISIBLE);//当文本框不为空时,出现叉叉            //执行按照文本框内容过滤listview            geteChanged();        }    }});


//执行eChanged线程public  void geteChanged(){    eChanged syncRunnable2=new eChanged();    Thread thread2=new Thread(syncRunnable2,"syncRunnable");    thread2.start();}//实现根据文本框内容搜索ListView,public  class eChanged implements Runnable {    @Override    public void run() {        synchronized (this) {            try {                TextView eSearch=(TextView) findViewById(R.id.etSearch);                String data = eSearch.getText().toString();                ArrayList<HashMap<String,Object>> list=getmDataSub(data);                simpleAdapter=new SimpleAdapter(Object_Device.this,list,//需要绑定的数据                        R.layout.device_listview_item,                        new String[] {"ItemTitle","ItemImg"},                        new int[] {R.id.ItemTitle,R.id.ItemImg});                Message msg=new Message();                msg.what=COMPLETED;                handler.sendMessage(msg);            } catch (Exception e) {                e.printStackTrace();            }        }    }}

//根据输入的data来查询listItem数据并放入list1中, listItem内初始化需要装载数据,private ArrayList<HashMap<String,Object>> getmDataSub(String data){    ArrayList<HashMap<String,Object>> list1=new ArrayList<HashMap<String, Object>>();    for(Object obj:listItem){        HashMap map = (HashMap)obj;        Object title=  map.get("ItemTitle");        if(String.valueOf(title).contains(data)){            list1.add(map);        }    }    return list1;}


0 0
原创粉丝点击