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

搜索框设计可以参考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,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,Object>> getmDataSub(String data)
{
    ArrayList,Object>> list1=new ArrayList, 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;
}


你可能感兴趣的:(Andoird)