Я потратил на это около 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
использовании jogball. Примечание: нажатие на EditText
значок сфокусирует его в этой точке, однако это зависит от сенсорного экрана, что не является обязательным требованием.
ListView
по-видимому, имеет два режима в этом отношении:
1. setItemsCanFocus(true)
Селектор: никогда не отображается, но EditText
может получить фокус при использовании стрелок. Алгоритм поиска по фокусу трудно предсказать, и нет визуальной обратной связи (в любых строках: есть ли дочерние элементы с фокусом или нет) о том, какой элемент выбран, и то и другое может дать пользователю неожиданный опыт.
2 setItemsCanFocus(false)
.: селектор всегда отображается в режиме без касания и EditText
никогда не может получить фокус - даже если вы нажмете на него.
Что еще хуже, вызов editTextView.requestFocus()
возвращает true, но фактически не дает фокус EditText.
То, что я представляю, в основном представляет собой гибрид 1 и 2, где вместо настройки списка, если все элементы являются фокусируемыми или нет, я хочу установить фокусируемость для одного элемента в списке, чтобы селектор плавно переходил от выбора целая строка для не фокусируемых элементов и обход дерева фокуса для элементов, которые содержат фокусируемые дочерние элементы.
Есть берущие?