AutoCompleteTextView的onItemSelectedListener无法工作

60

我有一个AutoCompleteTextView,并为其设置了onItemSelectedListener,但它不起作用。

你有任何想法是什么问题吗? 这是我的Activity代码,如果需要,我还可以提供main.xml文件。

   package com.chidem;

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;

    public class ChidemActivity extends Activity implements OnItemSelectedListener{
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            String hop[]=new String[]{
                    "Karen","Mika","Gevor"
            };

            AutoCompleteTextView searchHotels = (AutoCompleteTextView) findViewById(R.id.autoSearch);
            searchHotels.setOnItemSelectedListener(this);

            ArrayAdapter<String> adapter1 = new ArrayAdapter<String>( this, R.layout.list_item, hop);
            searchHotels.setAdapter(adapter1);

        }


        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Log.d("autocomplete", "itemselected");

        }

        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    }

你在LogCat中看到了什么? - Shashank Kadne
我找不到我的日志!Log.d("autocomplete", "itemselected"); - Karen
我甚至在onItemSelected函数中设置了断点并尝试进行调试。 - Karen
我正在这里做类似的事情!!! https://dev59.com/Y-o6XIcBkEYKwwoYPR_f - Etienne Lawlor
4个回答

122
伙计,你会因自己的错误而笑出声来。这个方法对我起作用了。你添加了OnItemSelectedListener而不是OnItemClickListener
如果您仅使用轨迹球或上/下箭头选择项目或浏览视图,则该方法将仅适用于您。在您的字符串中再添加一个以"k"开头的值,比如Karen1。键入"k"并在Karen和Karen1之间进行选择。您会看到它能够工作。如果你想要点击事件,那么请添加OnItemClickListener并重写相关方法。
public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3)

2
你应该将这选为正确答案,这样其他查看此链接的人就能知道问题出在哪里了。 - Shashank Kadne
2
我也笑了,这是个愚蠢的错误,但正如我们所看到的,很多人都被搞糊涂了。 - Renetik
这里没有什么好笑的。这不是开发人员的错误,而是谷歌的错误。提供这样一个方法的意义是什么呢,如果一开始就无法正常工作?很多开发人员正在从Spinner迁移,例如,他们习惯使用的AdapterView.OnItemSelectedListener在这里也提供了,但却无法正常工作。 - Muntashir Akon
这个不起作用吗? - Learn2Code

16

您必须使用

OnItemClickListener

而不是使用 OnItemSelectedListener。


6

看起来,最近的问题可能不在所问问题的代码中,而是在AutoCompleteTextView类本身的源代码中。

尽管AutoCompleteTextView类通过setOnItemSelectedListener方法设置了它的OnItemSelectedListener,但在整个类中没有任何监听器方法被调用。因此,该监听器没有被使用(原因只有开发者自己知道!)。

源代码在这里:https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/AutoCompleteTextView.java

因此,替代方案是使用OnItemClickListener


嗯...我不知道你是否看到了,但setOnItemSelectedListener方法已经被弃用了。 - Iogui

0

关于JAVA

myAutoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                
                Log.e(tag, "Clicked!");
                myAutoCompleteTextView.clearFocus();
            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接