AutoCompleteTextView - Показать предложения после выбора

Я использую AutoCompleteTextView для предложений адреса.

Что я хочу сделать, так это когда пользователь вводит адрес (например, «Ма»), предложения отображаются как «Мэри, Мэдли, Ма ...».

Затем, когда пользователь выбирает одно из предложений, он сразу же получает другие предложения, содержащие весь адрес.

Например: он выбрал «Мэри» и получил предложения вроде «Мэри 123, Бостон», «Мэри 1566, Нью-Йорк», «Мэри Джейн 569, Нью-Йорк».

Проблема в том, что предложения вводятся в адаптере, но не отображаются. Выпадающий список не отображается после выбора.

Пока мой наблюдатель текста назначен AutoCompleteTextView, отвечающим за предложения:

TextWatcher textWatcher = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void afterTextChanged(Editable s) {

        if(etStreet.isPerformingCompletion())
            return;

        List<String> arrayValues = getValues();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_dropdown_item_1line, arrayValues);
        etUlica.setAdapter(adapter);

    }
};

Я пробовал вызывать showDropDown () при щелчке по элементу, изменении текста и любом другом событии, но оно просто не отображается. Он отображается только тогда, когда пользователь вводит текст с клавиатуры.


person Dino Velić    schedule 26.11.2015    source источник
comment
не знаю, может это сработает, а может и нет ... попробуйте снова отобразить предложение после выбора, сделанного пользователем, написав autocompletetextview.showDropDown ();   -  person Mustanser Iqbal    schedule 26.11.2015
comment
@MustanserIqbal Я объяснил, что пробовал это во многих местах, но это все равно не отображается.   -  person Dino Velić    schedule 26.11.2015
comment
я должен работать, но, возможно, в этом случае это не сработает .. потому что я не тестировал   -  person Mustanser Iqbal    schedule 26.11.2015
comment
тогда вам нужно создать собственное пользовательское автозаполнение текстового представления.   -  person Mustanser Iqbal    schedule 26.11.2015
comment
Я могу ошибаться, потому что не знаю, как работает ваш выпадающий список. Не нужно ли уведомлять, увидев адаптер?   -  person cgr    schedule 26.11.2015
comment
не знаю точно, но setOnClickListener из AutoCompleteTextView вы можете попробовать установить новый адаптер вашего адреса, используя значение вашего имени   -  person Pavya    schedule 26.11.2015


Ответы (1)


напишите ниже код в вашем AutoCompleteTextView.setOnItemClickListener ()

autoComplete.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            autoComplete.postDelayed(new Runnable() {
                @Override
                public void run() {
                    autoComplete.showDropDown();
                }
            },100);
            autoComplete.setText(autoComplete.getText().toString());
            autoComplete.setSelection(autoComplete.getText().length());

        }
    });

И все, будет работать как шарм !!!

Это даст вам подсказку по вашему вопросу, измените ее в соответствии с вашими потребностями и данными адаптера.

person Ravi    schedule 26.11.2015
comment
Да вроде работает, но почему? Какая операция должна завершиться за эти 100 мс? И если это действительно займет больше времени, что произойдет? - person personne3000; 24.05.2016
comment
Что я узнал: Android закроет раскрывающийся список после onItemClick, поэтому вызов showDropdown там не сработает. Я рекомендую использовать onDismissListener для инициализации следующего предложения вместо использования задач, отложенных с произвольной продолжительностью. - person personne3000; 24.05.2016