Я потратил около 6 часов на это до сих пор и ничего не сделал, кроме блокпостов. Общая предпосылка заключается в том, что существует некоторая строка в ListView
(независимо от того, сгенерирована ли она адаптером или добавлена в виде заголовка), которая содержит виджет EditText
и Button
. Все, что я хочу сделать, это использовать jogball/стрелки для перемещения селектора к отдельным элементам, как обычно, но когда я попадаю в определенную строку - даже если мне нужно явно идентифицировать строку - child, я хочу, чтобы этот ребенок делал фокус вместо указания позиции с помощью селектора.Фокусируемая EditText внутри ListView
Я пробовал много возможностей и до сих пор не повезло.
расположение:
<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, где вместо настройки списка, если все элементы фокусирования или нет, я хочу установить фокусируемости для одного элемента в списке, так что селектор плавно переходит из выбора всей строки для не-фокусируемых элементов и пересекает дерево фокуса для элементов, которые содержат сфокусированные дети.
Любые берущие?
очень круто, еще не проверено. Вы тестировали на 1.5, 1.6 и 3.0? –
Рафаэль Санчес: Я не касался проекта с 2.1, но в то время он был подтвержден, работая в 1.5, 1.6 и 2.1. Я не гарантирую, что он по-прежнему работает в версии 2.2 или более поздней. – Joe
требуется только \t android: descendantFocusability = "afterDescendants" - в любом случае +1 – kellogs