AutoCompleteTextView如何传一个对象而不是简单的List<String>且仅展示想要的value

  • 需求如题所示,每次看到 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 是当前搜索列表的选中位置,而不是原始列表。 
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值