您的位置:首页 > 移动开发 > Android开发

Android中级第二讲--制作搜索页面,使用TextWatcher

2012-12-04 20:48 197 查看
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved !

大家好,如果有人因为要做一个随“输入框内容改变”,带动相关数据同时也发生改变的搜索页面,而不知所措的时候,那么可以来看看这篇博客。

大家可能都用过onClickListener或者onItemClickListener,那些是用来绑定按钮或者列表的,用来响应一些反应

那么TextWatcher呢,是专门用在输入框上的。现在就带大家来学习一下提高课程。

首先,声明一个EditText并且绑定TextWatcher。注意不是set而是add

contact_search.addTextChangedListener(mTextwatcher);


然后,重构TextWatcher

/**
* 搜索框事件
*/
private TextWatcher mTextwatcher = new TextWatcher() {

@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
myAdapter.notifyDataSetChanged();
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
// 进行一些输入前的准备,比如声明adapter,new一个progressbar等
if (myAdapter == null) {
myAdapter = new MyAdapter();
list.setAdapter(myAdapter);
}
}

@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
String query = s.toString().trim();
if (!TextUtils.isEmpty(query)) {
//用来获取给adapter绑定的数据
} else {
//用来获取当前页面应有的数据
}
}

};


大家可以看到TextWatcher呢,有三个内部方法beforeTextChanged,onTextChanged,afterTextChanged,根据名字我们就可以知道他们的意思,在输入框内容变化前,变化时,变化后所应采取的操作

一般我们可以在变化前声明好adapter,不过我们一般也会在oncreate或者onstart方法里面声明,但如果此页面只显示搜索数据而不显示其他的时候,可以在这里声明

变化时,如上面代码,不为空时查找数据,为空时进行提示

变化后,我们可以操作adapter进行数据刷新,为什么要用myAdapter.notifyDataSetChanged();呢,这里涉及了一个知识点,adapter继承自baseAdapter ,声明后,对象已经存在,如果数据改变再声明再绑定会浪费系统内存,所以系统提供了notifyDataSetChanged这个方法来刷新数据。

主要代码就在上面,欢迎大家一起探讨学习!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐