OnItemClick到AutoCompleteTextView

时间:2014-01-14 09:33:05

标签: android autocomplete onitemclicklistener

我在项目上遇到麻烦点击进入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());


}

2 个答案:

答案 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")