autocompletetextview setonitemselectedlistener не работает

там я пытаюсь написать код для авторизации. Когда я помещаю какую-либо запись в inputEmail, я ожидаю, что мой inputPasword будет сохранен автоматически, если соответствующая запись существует. Однако onItemSelectedListener, похоже, не работает. Когда я выбираю элемент, ничего не происходит. Журнал не срабатывает. Я хотел бы знать, если я сделал какую-то ошибку или я иду в неправильном подходе.

AutoCompleteTextView inputEmail;
inputEmail = (AutoCompleteTextView) findViewById(R.id.loginEmail);
inputEmail.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Set<String> keys = prefs.getAll().keySet();
                emails.clear();

                if (keys.size() != 0) {
                    emails.addAll(keys);
                } else
                    emails.add("");

                inputEmail.setAdapter(adapter);

                email = inputEmail.getText().toString();

            }

        });
inputEmail.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                email = inputEmail.getText().toString();
                password = prefs.getString(email, "");
                Log.d(email + " "+password, "email+password");
                if (password.length() > 1) {
                    inputPassword.setText(password);
                }

            }

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

            }

        });

person Yarh    schedule 04.06.2013    source источник
comment
это похоже на баг андроида. При проверке кода фреймворка зарегистрированный обратный вызов никогда не используется. Может быть, вы можете отправить отчет об ошибке   -  person nandeesh    schedule 04.06.2013


Ответы (3)


Это дубликат этого вопроса

Однако вам необходимо использовать AdapterView.OnItemClickListener(), а не OnItemSelectedListener .

Я успешно протестировал его, используя следующий фрагмент кода. Спасибо Vogella за адаптер.

    AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.autocomplete_textview);

    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
            "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
            "Android", "iPhone", "WindowsMobile" };

    ArrayList<String> list = new ArrayList<String>();
    for (int i = 0; i < values.length; ++i) {
        list.add(values[i]);
    }
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, list);
    actv.setAdapter(adapter);

    actv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(MainActivity.this,
                    adapter.getItem(position).toString(),
                    Toast.LENGTH_SHORT).show();
        }
    });
person Josh    schedule 05.06.2013
comment
его указанная позиция в списке показана, поэтому позиция не соответствует исходным данным. Настоящее решение здесь: spapas.github.io/2019/04. /05/android-пользовательский-фильтр-адаптер. Вам необходимо предоставить значения FilterResult. - person Susanta; 12.02.2020

autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String selectedItem=autoCompleteTextView.getAdapter().getItem(position).toString();
            Toast.makeText(getApplicationContext(),selectedItem ,  Toast.LENGTH_SHORT).show();
        }
    });

Просто получите адаптер AutoCompleteTextView и используйте позицию.

person REMITH    schedule 15.02.2017

Используйте setOnItemClickListener и не используйте setOnItemSelectedListener. Также используйте свой собственный объект адаптера для получения выбранных значений.

 prodNameAutoCompTxt.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {


                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    //Don't use this method
                }

                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {
                    System.out.println("Nothing selected");
                }
            });
            prodNameAutoCompTxt.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    //Use this method
                    Product prodObj=(Product) prodAutoAdapter.getItem(i);
                    new UomSynch().execute(prodObj.getProdID());
                }
            });
person Master Mind    schedule 29.11.2017