- 需求如题所示,每次看到 AutoCompleteTextView(后文将以AT表示此控件)的示例用法都是仅仅能传进去一个 List<String>,若最后我们想要的不是输入框内的值,而是值对应的Id的时候肿么办咧?
- 举个栗子:有这么一个 Bean,Student 类,当我们把这个对象传到 AT 中时,我们仅仅只想展示 studentName,不展示其余字段,然而看源码发现,AT 控件是通过对象的 toString() 方法来获取 value 的,意思就是通过 Student 的 toString() 方法获取展示的每个 item 项的 value。
- 此时问题就清晰了,我们可以通过重写 Student 的 toString() 方法来控制需要 AT 展示的 value
-
然后问题又来了,我们如何获取对象呢?又如何去获取所选 item 中对象的 ID 呢?很简单,透过源码发现其实 AT 是通过adapter.getItem(position) 方法去获取对象的。所以我们可以酱紫:
- 大功告成啦~现在就可以任性的传自己的对象,(后面的是我之前没有采用上述方法所遇到的坑,可以不看,因为写的有点乱)而不需要每次都把对象的某个字段抽成一个 List<String>,然后再放到 AT 中,最后还得根据 value 去遍历出 Id,这样不仅麻烦,且当 value 不唯一时还容易出错,然后就算不根据 value 去遍历判断而是根据 position 也是行不通的,因为 setOnItemClickListener 中返回的 position 是当前搜索列表的选中位置,而不是原始列表。