Редактировать текст в ListActivity ListView теряет фокус, когда появляется клавиатура

Я искал и искал ответ на этот вопрос, и все, что выглядело как ответ, не сработало, поэтому я думаю, что просто спрошу.

Я добавьте пару блоков EditText в ListView , который является основой для ListActivity . Когда я устанавливаю windowSoftInputMode на adjustPan и нажимаю EditText , он работает, пока вы не нажмете на него еще раз, а затем клавиатура закроет его. Когда я использую adjustResize , он работает, за исключением случаев, когда клавиатура появляется, EditText теряет фокус, и мне приходится снова нажимать на него, чтобы печатать.

Я пытался понять, как отловить onResize , но похоже, что это связано с представлением, а не с активностью, и я не совсем уверен, как это отслеживать. Я также пробовал всевозможные настраиваемые параметры в полях EditText и самом ListView (как предлагалось в других сообщениях, которые я читал), которые, похоже, тоже не помогают.

25
задан Andrew Medico 23 June 2014 в 15:36
поделиться

4 ответа

Все, что вам действительно нужно сделать, это применить это к вашему ListView:

XML:

android:descendantFocusability="afterDescendants"

Java:

listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
63
ответ дан 28 November 2019 в 18:15
поделиться

Пробовали ли вы после того, как вы сделали adjustResize, чтобы убедиться, что вы сбросили фокусировку на EditText, выполнив что-то вроде EditText.requestFocus();, чтобы у него снова был фокус, и пользователю не нужно было снова нажимать на него. Вы можете использовать EditText.isFocused(), чтобы увидеть, сфокусировано ли оно (true) или нет (false) в операторе журнала отладки или что-то еще.

Возможно, вам также потребуется установить поле на focusable, используя SetFocusable(), но будьте осторожны, потому что это может отвлечь внимание от самого ListView и лишить вас возможности прокручивать или выбирать вещи позже, так что вам придется поэкспериментировать с настройкой фокуса и фокусировки.

0
ответ дан 28 November 2019 в 18:15
поделиться

В этом мне помогло сочетание следующих моментов (особенно номер 3):

1) Добавьте следующее к связанному действию в файле манифеста, это необходимо для изменения размера ListView, чтобы заполнить только область над softKeyboard:

android:windowSoftInputMode="adjustResize"

2) С помощью приведенного ниже элемента ListView ТОЛЬКО получит фокус, только если ни один из его потомков не хочет этого. Потомки (EditText) должны получить и сохранить фокус.

<ListView
...
android:descendantFocusability="afterDescendants"/>

3) Автоматическое отображение / скрытие панели правописания прямо над клавиатурой продолжает вызывать обновление ListView. Я отключил предложения для любого EditText в моем ListView.

<EditText
...
android:inputType="textNoSuggestions|textVisiblePassword" />
1
ответ дан 28 November 2019 в 18:15
поделиться

вид переработчика работает лучше всего, и нет необходимости возиться с какими-либо другими объектами.

0
ответ дан 28 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: