我有来自数据库的用户数据谎言名称等,该数据库正在填充到AutoCompleteTextView,但ItemCLickListener中的位置是自动完成列表中显示的位置。 我想要数组索引,并且从适配器获取字符串不会起作用,因为同样的名字也可以存在。
更新
例如。在数据库中,我有4个条目abc,xyz,abc,pqrq以及其他字段中的一些其他数据。这些名称存储在一个数组中。
所以当我点击abc时,我想要获取其他数据,只有当我知道所选项目的数组索引时才能这样做。
帮助!
答案 0 :(得分:0)
解决方案:
示例: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();
}
});
就是这样,有你需要的索引。请注意,对于大型数组,此方法将很慢。