11

Mam AutoCompleteTextView używam, aby wybrać pozycję z długiej listy. Użytkownik powinien mieć możliwość wyboru tylko z góry określonego elementu z listy. Nie powinni mieć możliwości wprowadzania własnego przedmiotu.AutoCompleteTextView wykrywa, kiedy wybrany wpis z listy jest edytowany przez użytkownika

Sposób, w jaki sprawdzam, aby upewnić się, że przesłany zostanie tylko element z listy, to użycie opcji setOnItemClickListener w celu wyzwolenia flagi binarnej. Problem polega na tym, że po ustawieniu flagi boolowskiej na wartość true, nadal można edytować wybrany tekst elementu. Muszę to wykryć i ponownie ustawić flagę logiczną na false. Jak mam to zrobic. Widziałem propozycję użycia onKeyDown, ale nie jestem pewien, jak to zaimplementować.

Odpowiedz

42

Możesz dodać tekst zmieniony słuchacza:

autoCompleteTextView.addTextChangedListener(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) { 

    } 
}); 
+0

W jaki sposób można odróżnić opcję wyboru od zastąpienia całego ciągu przez użytkownika tym rozwiązaniem? – foo

1

Wprowadź TextWatcher, który da ci 3 metody, które będą nieustannie otrzymywać oddzwanianie, gdy ktoś zmieni tekst. Jeśli ciąg znaków się powiększy, użytkownik ponownie wpisuje.

-1

Używaj

AutoCompleteTextView#setOnItemSelectedListener() 

- działa jak czar.

+0

Chociaż ten fragment kodu może rozwiązać pytanie, [w tym wyjaśnienie] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) naprawdę pomaga poprawić jakość twojego postu. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. –

Powiązane problemy