【问题标题】:android: AutoCompleteTextView with custom adapterandroid:带有自定义适配器的 AutoCompleteTextView
【发布时间】:2023-03-19 02:37:01
【问题描述】:

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

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

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

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

有什么想法吗? 问候 danjoo

【问题讨论】:

  • 如果您至少发布一些相关代码会更好地理解您的问题。

标签: java android android-adapter autocompletetextview


【解决方案1】:
// 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);
            }
        });

【讨论】:

【解决方案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);
        }
    });

您必须在您的CustomAdapter 中创建一个自定义getItemAtPosition 方法。这样,您不必覆盖AutoCompleteTextView 请求的getItem(int position),而是可以使用getItemAtPosition 来返回您想要的CustomObject

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多