zoukankan      html  css  js  c++  java
  • 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这个方法来刷新数据。


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

  • 相关阅读:
    database backup scripts
    RMAN笔记之备份集和备份片
    数据缓冲区详解
    Oracle数据库中快照的使用
    linux 安装RabbitMQ 注意版本
    转 Oracle12c/11个 Client安装出现"[INS-30131]"错误“请确保当前用户具有访问临时位置所需的权限”解决办法之完整版
    Oracle alert日志中出现:‘Fatal NI connect error 12170’
    Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区
    python基础: String类型
    Python3 urllib模块的使用(转载)
  • 原文地址:https://www.cnblogs.com/fengju/p/6174481.html
Copyright © 2011-2022 走看看