小轩窗i
给时光以生命,而不是给生命以时光。 ——小菜鸟的飞行日记

最近在做的一个小项目要用到搜索功能,于是在网上找了资料来看,现在记录下来,以免以后遗忘了。在学习Android时写的一个小例子基础上写的

参考链接:

Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

[Android]文本框实现搜索和清空效果

----------------------------------------------------------------------------------------

一个ListView 和 Adapter 填充数据,要根据输入的内容动态改变ListView的显示

MainActivity:
 
private ListView lv;
private List<Goods> lists=new ArrayList<Goods>();
private EditText et_search;
private GoodsAdapter adapter;
private Drawable imgClear;

 

 
lv=(ListView)findViewById(R.id.lv_goods);
et_search=(EditText) findViewById(R.id.et_search);
et_search.addTextChangedListener(this);//根据输入框输入值的改变来过滤搜索
et_search.setOnTouchListener(this);
imgClear=getResources().getDrawable(R.drawable.delete);

adapter = new GoodsAdapter(MainActivity.this,R.layout.goods_item,lists);
lv.setAdapter(adapter);

 

public void filterData(String strData){
        List<Goods> filterLists=new ArrayList<Goods>();
        //如果输入框为空,则显示全部数据
        if(TextUtils.isEmpty(strData)){
            filterLists=lists;
        }else{//否则显示搜索结果
            filterLists.clear();
            for(Goods list:lists ){
                String name=list.getName();
                filterLists.add(list);
            }
        }
        adapter.updateView(this, filterLists);
    }

    //根据输入框输入值的改变来过滤搜索
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        //当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表  
       // filterData(s.toString());  
    }

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

    @Override
    public void afterTextChanged(Editable s) {
        //输入框不为空时,出现删除图标;为空时,消失
        if(TextUtils.isEmpty(s)){
            et_search.setCompoundDrawablesWithIntrinsicBounds(null,
                    null, imgClear, null);
        }
    }

    //清空输入框
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_UP:
            int curX = (int) event.getX();
            if (curX > v.getWidth() - 38
                    && !TextUtils.isEmpty(et_search.getText())) {
                et_search.setText("");
                int cacheInputType = et_search.getInputType();// backup  the input type
                et_search.setInputType(InputType.TYPE_NULL);// disable soft input
                et_search.onTouchEvent(event);// call native handler
                et_search.setInputType(cacheInputType);// restore input  type
                return true;// consume touch even
            }
            break;
        }
        return false;
    }

 

posted on 2015-09-12 10:52  小轩窗i  阅读(838)  评论(0编辑  收藏  举报