我在项目上遇到麻烦点击进入AutoCompleteTextView。使用下面的代码,我没有像在SQLite数据库中那样获得被点击项目的ID。假设我单击AutoComplete下拉列表中显示的第二个项目。我从id为2的数据库中获取值,而不是在数据库中的id不同的所选项的值。我确信我在onItemClick上的实现是错误的。我希望somone会帮助我解决这个问题。很长一段时间以来,我一直在为此烦恼。
我的代码:
SearchTrainee = (AutoCompleteTextView) findViewById(R.id.search);
trainees = new ArrayList<HashMap<String, String>>();
trainees = DatabaseHelper.getInstance().getStoredTrainees();
String str[] = new String[trainees.size()];
for (int i = 0; i < trainees.size(); i++) {
str[i] = trainees.get(i).get("display");
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.search_autocomplete, str);
SearchTrainee.setAdapter(adapter);
SearchTrainee.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
System.out.println("Last name: " + trainees.get(arg2).get("last_name"));
//currentTrainee.setFirstname(trainees.get(arg2).get("first_name"));
// currentTrainee.setCompany(trainees.get(arg2).get("company"));
// System.out.println(currentTrainee.getFirstname());
}
答案 0 :(得分:1)
我认为您打算将最后一行编码为:
System.out.println("Last name: " + arg0.getItemAtPosition(arg2).get("last_name"));
答案 1 :(得分:0)
问题是自动完成视图会过滤显示的内容,使其与初始数组不匹配,这意味着您不能依赖onItemClick中提供的索引来搜索trainee
数组。
要限制代码中的更改量,您可以执行以下操作:
像这样使用SimpleAdapter:
SimpleAdapter adapter = new SimpleAdapter(this, trainee,
R.layout.search_autocomplete, new String[] {"display"},
new int[] {R.id.text});
// R.id.text is to be replaced by the id of your TextView in the search_autocomplete layout
然后,在onItemClick中,检索代表受训者的地图,如下所示:
Map<String, String> selectedTrainee = ((Map<String, String>) arg0.getItemAtPosition(arg2));
然后,您可以根据需要操作对象(姓氏为selectedTrainee.get("last_name")
)