Показать все элементы в AutocompleteTextView без записи текста
У меня есть AutocompleteTextView, и он отлично работает. Когда я пишу слово, он показывает соответствующий результат, но я хочу, чтобы отобразить все элементы без написания какого-либо слова в AutocompleteTextView. Как я могу это сделать?
6 ответов
вам нужно расширить AutoCompleteTextView,
" когда порог меньше или равен 0, порог 1 равен прикладная.".
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;
            }
            });
