我有一个问题,在项目点击到AutoCompleteTextView。使用下面的代码,我不会像在SQLite数据库中那样获得单击项的id。假设我单击AutoComplete下拉列表中显示的第二项。我从id 2中的数据库中获得值,而不是数据库中id不同的选定项的值。我确信我的实现onItemClick是错误的。我希望有人能帮我解决这个问题。我很久以来一直对此感到不安。
我的守则:
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());
}发布于 2014-01-14 09:56:44
问题是,自动完成视图将过滤显示的内容,使其与初始数组不匹配,这意味着您不能依赖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"))。
发布于 2014-01-14 09:55:07
我认为您打算将最后一行编码如下:
System.out.println("Last name: " + arg0.getItemAtPosition(arg2).get("last_name"));https://stackoverflow.com/questions/21110029
复制相似问题