我编写了一个自定义适配器类,扩展了BaseAdapter,实现了Filterable以与AutoCompleteTextView一起使用。过滤和选择工作正常。
唯一的问题是,如果单击列表中的某个项目,AutoCompleteTextView似乎会自动调用适配器getItem(int position)
方法并将其文本设置为getItem(position).toString()
。
我不希望这种行为,因为我在基础适配器中使用自定义对象,这导致像"ClassName [id=xx, variable1=var1]"
这样的字符串放入TextView。
到目前为止,我尝试设置自己的OnItemClickListener和OnItemSelectedListener,但这似乎只是快速覆盖上面设置的字符串而不是直接编写我的自定义字符串。如何禁用此默认字符串?
哦,在这种情况下,覆盖Objects toString()方法不是一个选项。
有什么想法吗? 问候 danijoo
答案 0 :(得分:2)
// try this
autoCompleteText.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View arg1, int position, long arg3) {
String str = (String) adapterView.getItemAtPosition(position);
autoCompleteText.setText(str);
}
});
答案 1 :(得分:2)
我遇到了同样的问题,我用以下方法解决了这个问题:
private AutoCompleteTextView actv;
CustomAdapter adapter = new CustomAdapter(context, resource, data);
actv.setAdapter(adapter);
actv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> av, View view, int index, long arg3)
{
CustomAdapter adapter = (CustomAdapter)av.getAdapter();
Pair customObject = (Pair<Integer, String>) adapter.getItemAtPosition(index);
}
});
您必须在getItemAtPosition
内创建自定义CustomAdapter
方法。这样,您就不必覆盖getItem(int position)
请求的AutoCompleteTextView
,而是可以使用getItemAtPosition
来返回所需的CustomObject
。