Ich mag es, wenn meine Benutzeroberflächen intuitiv sind. Jeder Bildschirm sollte den Benutzer natürlich und unauffällig zum nächsten Schritt in der App führen. Ansonsten bemühe ich mich, die Dinge so verwirrend und verwirrend wie möglich zu gestalten.
Ich mache nur Spaß :-)
Ich habe drei TableRow
Sekunden, die jeweils ein schreibgeschütztes und nicht fokussierbares EditText-Steuerelement und dann eine Schaltfläche rechts davon enthalten. Jede Schaltfläche startet dieselbe Aktivität, jedoch mit einem anderen Argument. Der Benutzer trifft dort eine Auswahl, und die Unteraktivität wird beendet, wobei die entsprechende EditText
Auswahl mit der Auswahl des Benutzers gefüllt wird.
Es ist der klassische Mechanismus für kaskadierende Werte. Jede Auswahl schränkt die verfügbaren Optionen für die nächste Auswahl usw. ein. Daher deaktiviere ich beide Steuerelemente in jeder der nächsten Zeilen, bis der EditText in der aktuellen Zeile einen Wert enthält.
Ich muss eines von zwei Dingen in dieser Reihenfolge tun:
- Wenn Sie auf eine Schaltfläche klicken, entfernen Sie sofort den Fokus, ohne den Fokus auf eine andere Schaltfläche zu setzen
- Stellen Sie den Fokus auf die erste Schaltfläche, wenn die Aktivität beginnt
Das Problem tritt auf, nachdem die Unteraktivität zurückgekehrt ist. Die Schaltfläche, auf die geklickt wurde, behält den Fokus.
Betreff: Nr. 1 oben - Es scheint keine removeFocus()
Methode oder ähnliches zu geben
Betreff: # 2 oben - Ich kann requestFocus()
den Fokus auf die Schaltfläche in der nächsten Zeile setzen, und das funktioniert, nachdem die Unteraktivität zurückgekehrt ist, aber aus irgendeinem Grund funktioniert es nicht in der übergeordneten Aktivität onCreate()
.
Ich benötige Konsistenz der Benutzeroberfläche in beide Richtungen - entweder haben keine Schaltflächen nach Abschluss der Unteraktivität den Fokus oder jede Schaltfläche erhält den Fokus abhängig von ihrer Position im Logikfluss, einschließlich der allerersten (und einzigen) aktiven Schaltfläche vor einer Auswahl.