AutoCompleteTextView onItemSelectedListener does not work
Asked Answered
K

4

60

I have an AutoCompleteTextView and set onItemSelectedListener to it, which does not work.

Have you any idea what is the problem? Here is my Activity, I can also provide the main.xml file if it is needed.

   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

        }
    }
Keen answered 12/2, 2012 at 15:21 Comment(4)
What do you see in your LogCat?Waldowaldon
I dont see my logs! Log.d("autocomplete", "itemselected");Keen
I even putted a breakpoint in onItemSelected function and tried to debugKeen
I am doing something similar HERE!!! #12854836Quizzical
W
122

Dude, you will laugh at your mistake. Its working for me. You have added OnItemSelectedListener and not OnItemClickListener.

Your method will only work if you select your items or browse through the view using a trackball or up/down arrows. Use one more value in your String starting with "k" say Karen1. Type "k" and select between Karen and Karen1.You will see that it works. If you want click, then add OnItemClickListener and override

public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3)
Waldowaldon answered 12/2, 2012 at 16:1 Comment(4)
You should select this as the right answer..so that other people viewing this link would come ti know what the problem was?Waldowaldon
I am laughing too, stupid mistake, but as we see, a lot of people are confused by that.Gil
There's nothing to laugh at here. This isn't a mistake on the developers' end, but on Google's end. What's the point of providing such a method when it does not work in first place? A lot of developer are migrating from Spinner, for example, who are used to using AdapterView.OnItemSelectedListener which is also provided here but does not work.Cholula
This does NOT work!?Pummel
K
16

You must use

OnItemClickListener

instead of OnItemSelectedListener

Kelvin answered 16/4, 2012 at 19:9 Comment(0)
H
7

Looks like, of-late, the real problem may not be in the code of the question asked, but in the source code of the AutoCompleteTextView class itself.

Although the AutoCompleteTextView class sets it's OnItemSelectedListener through the setOnItemSelectedListener method, but nowhere in the class any listener method is called. Hence the listener remains unused. (reason best known to developers!)

Source code here: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/AutoCompleteTextView.java

As such, the alternative is to use the OnItemClickListener.

Hoffert answered 9/5, 2020 at 20:10 Comment(1)
Well... I don't know if you have saw this but the setOnItemSelectedListener method is deprecated.Lacustrine
T
0

For JAVA

myAutoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                
                Log.e(tag, "Clicked!");
                myAutoCompleteTextView.clearFocus();
            }
        });
Triste answered 12/4, 2022 at 15:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.