在设计app的输入界面时,假如假如智能提示,给用户带来的不只是方便,有时候还会是惊喜。通过实践研究,发现要实现android的个性化智能提示,实在非难事。

在Android中提供了两种智能输入框控件分是:MultiAutoCompleteTextView 和 AutoCompleteTextView 。

MultiAutoCompleteTextView继承自AutoCompleteTextView可编辑的文本视图,能够对用户键入的文本进行有效地扩充提示,而不需要用户输入整个内容。(用户输入一部分内容,剩下的部分系统就会给予提示)。用户必须提供一个MultiAutoCompleteTextView.Tokenizer用来区分不同的子串。使用方法如下:

MultiAutoCompleteTextView m_mutil = (MultiAutoCompleteTextView) findViewById(R.id.m_autobyname);m_mutil.setAdapter(adapter);m_mutil.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());  //用户正在输入时,tokenizer设置用于确定文本相关范围内

既然 MultiAutoCompleteTextViewAutoCompleteTextView的子类,那么MultiAutoCompleteTextView的基本功能,我们都可以通过定制AutoCompleteTextView来实现了。

AutoCompleteTextView 基本使用方法如下:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, autoString);  //autoString为一静态的字符数组AutoCompleteTextView m_auto =(AutoCompleteTextView) findViewById(R.id.antobyname);m_auto.setAdapter(adapter); //为智能输入框设置适配器m_auto.setThreshold(1); //更改触发提示的字符长度,default=2

熟悉android列表开发的话,对于Adapter应该非常熟悉,上面的实例代码,使用了android提供的ArrayAdapter,给予AutoCompleteTextView绑定数据与视图,我们要定制,首先从这里开始。

和其他Adaper一样,ArrayAdapter的基类也是BaseAdapter,我们可以定制自己的Adapter了。


可是一运行,木有反应,没有一点提示?

的确,我们的视图与数据是绑定了,可是AutoCompleteTextView 却不能根据我们的Adapter获取到合适的数据,因为adapter不符合要求!

我们反过来再研究一下ArrayAdapter,它除了是BaseAdapter的子类,它还实现了 Filterable 接口!

我们在AutoAdapter中,实现该接口,并返回一个自定义的 Filter

那个AutoMailFilter又是一个什么样子的类呢?

先细细想想AutoCompleteTextView 是怎样工作的,对,它只是对我们所输入的一些字符,进行过滤、索引,并组成相应的视图反馈给我们的用户,以提高我们的输入效率!

那接下来就是构建核心过滤器的时候了,AutoCompleteTextView只会接收过滤后的数据,所以我们的数据源会多出一份拷贝,一份是原始的,一份则是过滤后的:

在AutoMailFilter里面,由于继承了,我们必须实现两个重要的方法:

protected FilterResults performFiltering(CharSequence prefix)

在这个方法里面定制过滤策略,根据输入的prefix对数据进行过滤,并组装成FilterResults结果返回;

protected void publishResults(CharSequence constraint, FilterResults results)

这个方法则是发布结果用的,把上面方法的结果按照一定的要求进行处理后,通知Adapter进行数据视图的刷新

总结:

按照 AutoCompleteTextView的工作流程,它依赖两个组件,Adapter 和 Filter,一个是视图的处理,一个是数据过滤处理,对这两个组件进行深度定制,我们就可以随心所欲了。

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. android sqlite3命令
  3. Android数据库设计
  4. 控制来电显示的Android
  5. 视频播放器videoview surfaceview
  6. android创建文件夹以及向文件写入数据
  7. Android腾讯微博客户端开发三:多账号管理的实现
  8. android ViewPager学习笔记3
  9. SQLiteDatabaseTest

随机推荐

  1. Android(安卓)Tools
  2. Ubuntu Linux下android源码下载方法
  3. ANDROID STRINGS.XML的特殊字符_安卓STRI
  4. Android(安卓)局部刷新原理
  5. android应用安全――签名机制
  6. afinal logoAndroid的快速开发框架 afina
  7. Android(安卓)性能优化之使用MAT分析内存
  8. Libusb库在Android下的使用例程
  9. 如何修改Android设备添加重启、飞行模式
  10. 【Android】HAL分析