Показать все элементы в AutocompleteTextView без записи текста

У меня есть AutocompleteTextView, и он отлично работает. Когда я пишу слово, он показывает соответствующий результат, но я хочу, чтобы отобразить все элементы без написания какого-либо слова в AutocompleteTextView. Как я могу это сделать?

6 ответов


вам нужно расширить AutoCompleteTextView,

" когда порог меньше или равен 0, порог 1 равен прикладная.".

setThreshold

import android.content.Context;  
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;

public class InstantAutoComplete extends AutoCompleteTextView {

    public InstantAutoComplete(Context context) {
        super(context);
    }

    public InstantAutoComplete(Context arg0, AttributeSet arg1) {
        super(arg0, arg1);
    }

    public InstantAutoComplete(Context arg0, AttributeSet arg1, int arg2) {
        super(arg0, arg1, arg2);
    }

    @Override
    public boolean enoughToFilter() {
        return true;
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction,
            Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        if (focused) {
            performFiltering(getText(), 0);
        }
    }

}

в xml

<AutoCompleteTextView ... /> to <your.namespace.InstantAutoComplete ... />

правка 1

создайте новый класс с именем InstantAutoComplete затем поместите этот код в класс.

в вашем макете xml используйте этот класс как

затем найдите этот виджет в своей активности (onCreate метод.)

пример


ЛУЧШЕЕ РЕШЕНИЕ ЗДЕСЬ

вам не нужно настраивать ваш AutoCompleteTextView. Вместо этого просто позвоните autoCompleteTextView.showDropDown() всякий раз, когда вам это нужно.....ура :)


это работает для меня:

добавить к объекту следующие методы событий:

    myView.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus)
                myView.showDropDown();

        }
    });

    myView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            myView.showDropDown();
            return false;
        }
    });

это работает для меня отлично, это простой способ решить проблему:

final ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_dropdown_item_1line, usernameLists);
etUsername.setThreshold(1);
etUsername.setAdapter(adapter);
etUsername.setOnTouchListener(new View.OnTouchListener() {

    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouch(View paramView, MotionEvent paramMotionEvent) {
        if (usernameLists.size() > 0) {
                // show all suggestions
                if (!etUsername.getText().toString().equals(""))
                    adapter.getFilter().filter(null);
                etUsername.showDropDown();
            }
        return false;
    }
});

вам нужно вызвать requestFocus (); чтобы показать клавиатуру, иначе клавиатура не появится.

метод принудительно показать выпадающий список.

autocomptv.setOnTouchListener(new OnTouchListener() {

        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouch(View paramView, MotionEvent paramMotionEvent) {
            // TODO Auto-generated method stub
            autocomptv.showDropDown();
            autocomptv.requestFocus();
            return false;
        }
    });

используйте этот :

 text.setOnTouchListener(new View.OnTouchListener(){


            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                // TODO Auto-generated method stub
                text.showDropDown();
                return false;
            }
            });