小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

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

博客出自: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这个方法来刷新数据。


主要代码就在上面,欢迎大家一起探讨学习!

posted on 2012-12-04 20:48  王峰炬  阅读(223)  评论(0编辑  收藏  举报

导航