Ich habe bisher ungefähr 6 Stunden damit verbracht und nichts als Straßensperren getroffen. Die allgemeine Voraussetzung ist, dass eine Zeile ListView
(unabhängig davon, ob sie vom Adapter generiert oder als Header-Ansicht hinzugefügt wird) eine Zeile enthält, die ein EditText
Widget und ein enthält Button
. Alles, was ich tun möchte, ist, den Jogball / die Pfeile verwenden zu können, um den Selektor wie gewohnt zu einzelnen Elementen zu navigieren, aber wenn ich zu einer bestimmten Zeile komme - auch wenn ich die Zeile explizit identifizieren muss -, hat dies eine Fokussierbarkeit Kind, ich möchte, dass dieses Kind den Fokus erhält, anstatt die Position mit dem Selektor anzuzeigen.
Ich habe viele Möglichkeiten ausprobiert und bisher kein Glück gehabt.
Layout:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
Kopfansicht:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
Angenommen, der Adapter enthält weitere Elemente. Mit den Pfeiltasten wird die Auswahl in der Liste erwartungsgemäß nach oben / unten verschoben. Wenn Sie jedoch zur Kopfzeile gelangen, wird diese auch mit dem Selektor angezeigt, und Sie können sich nicht auf die EditText
Verwendung des Jogballs konzentrieren. Hinweis: Wenn Sie auf das tippen, EditText
wird es an diesem Punkt fokussiert. Dies hängt jedoch von einem Touchscreen ab, der nicht erforderlich sein sollte.
ListView
Anscheinend gibt es diesbezüglich zwei Modi:
1 . setItemsCanFocus(true)
: Der Selektor wird nie angezeigt, aber der EditText
kann bei Verwendung der Pfeile scharfgestellt werden. Der Fokus-Suchalgorithmus ist schwer vorherzusagen und es gibt kein visuelles Feedback (zu Zeilen: mit fokussierbaren untergeordneten Elementen oder nicht), welches Element ausgewählt ist. Beides kann dem Benutzer eine unerwartete Erfahrung bieten.
2 . setItemsCanFocus(false)
: Der Selektor wird immer im Non-Touch-Modus gezeichnet und EditText
kann niemals scharfgestellt werden - selbst wenn Sie darauf tippen.
Um die Sache noch schlimmer zu machen, gibt der Aufruf editTextView.requestFocus()
true zurück, gibt jedoch nicht den EditText-Fokus.
Was ich mir vorstelle, ist im Grunde eine Mischung aus 1 und 2, bei der ich anstelle der Listeneinstellung, ob alle Elemente fokussierbar sind oder nicht, die Fokussierbarkeit für ein einzelnes Element in der Liste festlegen möchte , damit der Selektor nahtlos von der Auswahl der Elemente abweicht ganze Zeile für nicht fokussierbare Elemente und Durchlaufen des Fokusbaums für Elemente, die fokussierbare untergeordnete Elemente enthalten.
Irgendwelche Abnehmer?