2

我编写了一个自定义适配器类,扩展 BaseAdapter 实现 Filterable 以与 AutoCompleteTextView 一起使用。过滤和选择工作正常。

唯一的问题是,如果单击列表中的项目, AutoCompleteTextView 似乎会自动调用适配器getItem(int position)方法并将其文本设置为getItem(position).toString(). 我不希望这种行为,因为我在基本适配器中使用自定义对象,这会导致像"ClassName [id=xx, variable1=var1]"放入 TextView 中的字符串。

到目前为止,我尝试设置自己的 OnItemClickListener 和 OnItemSelectedListener,但这似乎只是快速覆盖上面设置的字符串,而不是直接编写我的自定义字符串。如何禁用此默认字符串?

哦,在这种情况下,重写 Objects toString() 方法不是一种选择。

有任何想法吗?问候 danijoo

4

2 回答 2

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);
            }
        });
于 2013-10-07T13:00:16.287 回答
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);
        }
    });

您必须getItemAtPositionCustomAdapter. 通过这种方式,您不必覆盖getItem(int position)请求的AutoCompleteTextView,您可以使用它getItemAtPosition来返回您想要的CustomObject.

于 2013-11-06T15:55:40.277 回答