【问题标题】:How to handle Autocomplete Textview item selection?如何处理自动完成 Textview 项目选择?
【发布时间】:2018-06-26 14:11:55
【问题描述】:

我正在使用自动完成来显示数据库中的狗列表。

假设我有一个包含 3 个对象的 DogList:Dog1、Dog2、Dog3 和一个字符串数组“dogNames”,其中包含这些狗的每个名字(我正在使用这个数组获取自动完成适配器)。

当在显示完整列表时选择了一个项目时,我可以通过使用自动完成选定索引从 DogList 中获取它来处理选择了哪只狗,因为“DogList”和“dogNames”数组具有相同的大小:

    Dog newDog = new Dog();

    autoComplete_dogs.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            newDog = dogList.get(i);



        }

问题是当我键入 Dog3 并单击它时,选择的索引为 0,这给出了 Dog1 而不是 Dog3,因为 Dog1 在 DogList 中的索引为 0。

我应该如何对 DogList 进行动态排序,使其遵循自动完成结果列表,并且每次尝试使用自动完成索引从 DogList 中获取狗时,我都会得到正确的对象?

【问题讨论】:

  • 只有一个列表 - 包含 name 成员的 Dog 对象。
  • 自动完成适配器操作需要一个字符串数组。是的,Dog 对象具有 name 属性,
  • @IagoBrayham 你没有排序/更改你的 DogList 这是一个错误的方法。
  • 您不需要字符串数组。只需将Dog 数组传递给自定义ArrayAdapter,您只需覆盖其中的getView 方法。
  • @kalabalik 我应该对 getView 方法进行哪些更改?

标签: android arrays list autocompletetextview


【解决方案1】:

在你的 onItemClick 方法中使用这个

newDog = adapterView.getItemAtPosition(i);

【讨论】:

  • 这只有在我使用自定义适配器时才有效,对吧?因为当前适配器采用字符串数组,而不是列表
  • @IagoBrayham 我记得 getItemAtPosition 方法具有泛型类型,这取决于适配器中使用的类型。
  • 添加了一个自定义 DogAdapter 扩展阵列适配器,它工作正常。谢谢!
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 2011-09-05
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多