Я потратил на это около 6 часов и не наткнулся ни на что, кроме препятствий. Общая предпосылка состоит в том, что в ListView
(генерируется ли она адаптером или добавляется в виде заголовка) есть строка, содержащая виджет EditText
и Button
. Все, что я хочу сделать, это иметь возможность использовать джогбол / стрелки для перемещения селектора к отдельным элементам, как обычно, но когда я перехожу к определенной строке - даже если мне нужно явно идентифицировать строку - у которой есть фокусируемый child, я хочу, чтобы этот ребенок взял фокус вместо того, чтобы указывать позицию с помощью селектора.
Я пробовал много возможностей, и пока мне не повезло.
макет:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
Заголовок:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
Предполагая, что в адаптере есть другие элементы, использование клавиш со стрелками будет перемещать выбор вверх / вниз в списке, как и ожидалось; но при переходе к строке заголовка она также отображается с помощью селектора, и нет возможности сфокусироваться на EditText
с помощью джогбола. Примечание: нажатие на EditText
сфокусирует его на этой точке, однако это зависит от сенсорного экрана, что не является обязательным.
В этом отношении ListView
очевидно имеет два режима:
1. setItemsCanFocus(true)
: селектор никогда не отображается, но EditText
может получить фокус при использовании стрелок. Алгоритм поиска по фокусу трудно предсказать, и нет визуальной обратной связи (в любых строках: есть ли дочерние элементы с фокусом или нет) о том, какой элемент выбран, что может дать пользователю неожиданный опыт.
2. setItemsCanFocus(false)
: селектор всегда нарисовано в режиме без касания, и EditText
никогда не сможет сфокусироваться, даже если вы нажмете на него.
Что еще хуже, вызов editTextView.requestFocus()
возвращает true, но фактически не дает фокус EditText.
То, что я представляю, в основном представляет собой гибрид 1 и 2, где вместо настройки списка, если фокусируются все элементы или нет, я хочу установить фокусируемость для одного элемент в списке, так что селектор плавно переходит от выбора всей строки для нефокусируемых элементов и обхода дерева фокуса для элементов, которые содержат фокусируемые дочерние элементы.
Есть берущие?