如何从AutoCompleteTextView获取所选项目的数组索引?

时间:2017-10-26 17:52:22

标签: android position autocompletetextview

我有来自数据库的用户数据谎言名称等,该数据库正在填充到AutoCompleteTextView,但ItemCLickListener中的位置是自动完成列表中显示的位置。 我想要数组索引,并且从适配器获取字符串不会起作用,因为同样的名字也可以存在。

更新

例如。在数据库中,我有4个条目abc,xyz,abc,pqrq以及其他字段中的一些其他数据。这些名称存储在一个数组中。

所以当我点击abc时,我想要获取其他数据,只有当我知道所选项目的数组索引时才能这样做。

帮助!

2 个答案:

答案 0 :(得分:0)

解决方案:

  1. 为其项目自定义auto_complete_tv_adapter。
  2. 适配器列表项将是模型,其中将包含其他数据的名称。
  3. 您将拥有所有其他值的数据模型。
  4. 示例:https://www.androidcode.ninja/android-autocompletetextview-custom-arrayadapter-sqlite/

答案 1 :(得分:0)

您应该创建一个包含自定义对象的数组,而不是使用Strings数组。

首先,像这样创建一个新的class

class CustomObject {

   public long id;
   public String name;

   public CustomObject(long id, String name) {
       this.id = id;
       this.name = name;
   }

   @Override
   public String toString() {
       return name;
   }
}

然后,您从数据库中获取数据Strings,而不是仅存储String,您还可以向数组中添加唯一 ID我们将在以后使用。

因此,例如,您可以像这样填充数组:

 // this array should contain the items from your database, and a unique id
 final CustomObject[] items = { new CustomObject(0, "test"), new CustomObject(1, "test"),
        new CustomObject(2123123, "another name")};

然后让您的AutoCompleteTextview点击检测器看起来像这样:

    textView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CustomObject customObject = (CustomObject) parent.getItemAtPosition(position);
            int index = -1;
            for (int i = 0; i < items.length; i++) {
                if (items[i].id == customObject.id) {
                    index = i;
                    break;
                }
            }
            // now we have your index :)
            Toast.makeText(MainActivity.this, "Your index = " + index,
                    Toast.LENGTH_SHORT).show();
        }
    });

就是这样,有你需要的索引。请注意,对于大型数组,此方法将很慢。