Редактировать текст в ListActivity ListView теряет фокус при появлении клавиатуры - PullRequest
24 голосов
/ 03 августа 2011

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

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

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

Ответы [ 7 ]

62 голосов
/ 08 марта 2013

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

XML:

android:descendantFocusability="afterDescendants"

Java

listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
2 голосов
/ 26 мая 2018

В моем случае это прекрасно работало с добавлением такого кода в манифест:

android:windowSoftInputMode="adjustPan"
1 голос
/ 30 ноября 2015

Мне помогла комбинация следующего (особенно номер 3):

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

android:windowSoftInputMode="adjustResize"

2) При использовании ниже ListView будет получать только фокус, только если ни один из его потомков не хочет этого.Потомки (EditText) должны получить и сохранить фокус.

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

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

<EditText
...
android:inputType="textNoSuggestions|textVisiblePassword" />
0 голосов
/ 01 февраля 2017

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

0 голосов
/ 23 июня 2014
mViewHolder.editText = (EditText)convertView.findViewById(R.id.editText1);
            mViewHolder.editText.setTag(position);
            mViewHolder.editText.setTextColor(0xFF000000);
            mViewHolder.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                public void onFocusChange(View v, boolean hasFocus) {
                    if (!hasFocus) {
                        EditText et =(EditText)v.findViewById(R.id.editText1);
                        editTextArrayList.set(position,et.getText().toString().trim());
                    }
                }
            });

Привет ниже ссылка может помочь вам http://mylearnandroid.blogspot.in/2014/06/listview-problem-while-scrolling.html

0 голосов
/ 22 марта 2012

У меня возникла точно такая же проблема в моем проекте.

Чтобы решить эту проблему, я поместил в подкласс EditText и обработал нажатие кнопки «Назад» - чтобы убедиться, что мой EditText очищает фокус в этот момент.

Проверьте это решение , как это сделать.

Удачи.

0 голосов
/ 03 августа 2011

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

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

...