ArrayAdapter小结

来源:互联网 发布:刺客信条知乎 编辑:程序博客网 时间:2024/05/17 17:39

以前用ArrayAdapter时,所带入的数据都是String数组或者是List,网上大部分人也是这么使用的,所以一直就很奇怪,为什么ArrayAdapter是一个泛型,但使用的时候却总是String呢?今天看下了ArrayAdapter的源码才发现,getView中用到的是传入对象的toString(),如果是String肯定没问题。因此,如果要用到自己定义的对象的话,可以重新写下toString方法,返回要显示的内容就好了。


一般上很少使用ArrayAdapter,更多的是自己去继承BaseAdapter。但是在使用AutoCompleteTextView和MultiAutoCompleteTextView,发现好多例子都是用ArrayAdapter来实现,这个更适用于提示内容和选择后的内容一致的情况,比如说做历史记录的时候。


说到AutoCompleteTextView和MultiAutoCompleteTextView,二者主要差别应该就是:前者只能选择一次,而后者可以进行多次选择,并且后者还需多加上一句:multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());这样才会起到作用,目前对于CommaTokenizer类并不是很了解。

现在做到的功能是像发送短信页面选择收信人时一样,选择提示是两行:姓名和电话号码,选择后提示的是“某某某<189********>”的样式,所以,我们就不能直接拿ArrayAdapter来使用了,但是我们可以拿过来进行一些改动:

(1)修改getView方法,按照自己需要的布局来;

(2)过滤的条件是在ArrayFilter中的performFiltering中,可以看到,里边是用了对象的toString值来进行过滤,我们可以在自己的类中定义一个方法,返回过滤的条件,以空格隔开,如:String getComparWords(){

return name + " " + phone;

这样就可以通过名字和号码进行过滤。

(3)选择后的内容显示是由getItem返回的对象决定的,一般上都是传入对象,所以,用的也是对象的toString方法,但是,我们可以修改这个方法,包括返回值的类型,实现我们自己要显示的内容。


看来理解相关的源代码很是重要呀。

0 0