Lubię, gdy moje interfejsy użytkownika są intuicyjne; każdy ekran powinien w naturalny i dyskretny sposób prowadzić użytkownika do następnego kroku w aplikacji. Poza tym staram się, aby rzeczy były jak najbardziej zagmatwane i zagmatwane.
Żartuję :-)
Mam trzy TableRow
s, z których każdy zawiera tylko do odczytu i nie można fokusować kontrolkę EditText, a następnie przycisk po jej prawej stronie. Każdy przycisk uruchamia to samo działanie, ale z innym argumentem. Użytkownik dokonuje w tym miejscu wyboru, a działanie podrzędne kończy, wypełniając odpowiednie EditText
zaznaczeniem użytkownika.
To klasyczny mechanizm kaskadowych wartości; każde zaznaczenie zawęża dostępne opcje dla następnego zaznaczenia, itp. Dlatego wyłączam obie kontrolki w każdym z następnych wierszy, dopóki EditText w bieżącym wierszu nie będzie zawierała wartości.
Muszę zrobić jedną z dwóch rzeczy, w następującej kolejności:
- Po kliknięciu przycisku natychmiast usuń fokus bez ustawiania fokusu na inny przycisk
- Po rozpoczęciu działania ustaw fokus na pierwszy przycisk
Problem objawia się po powrocie poddziałania; kliknięty przycisk zachowuje fokus.
Re: # 1 powyżej - Wygląda na to removeFocus()
, że nie ma metody ani czegoś podobnego
Re: # 2 powyżej - mogę użyć, requestFocus()
aby ustawić fokus na przycisk w następnym wierszu, który działa po powrocie działania podrzędnego, ale z jakiegoś powodu nie działa w działaniu nadrzędnym onCreate()
.
Potrzebuję spójności interfejsu użytkownika w dowolnym kierunku - albo żaden przycisk nie jest aktywny po zakończeniu działania podrzędnego, albo każdy przycisk otrzymuje fokus w zależności od jego miejsca w przepływie logiki, w tym pierwszego (i jedynego) aktywnego przycisku przed jakimkolwiek wyborem.