Показать все элементы в 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;
}
});