Подтвердить что ты не робот

Редактировать текст в ListActivity ListView теряет фокус при нажатии клавиатуры

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

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

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

4b9b3361

Ответ 1

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

XML:

android:descendantFocusability="afterDescendants"

Java:

listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

Ответ 2

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

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

Ответ 3

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

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

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

Удачи.

Ответ 4

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

Ответ 5

Для меня мне помогла комбинация (особенно номер 3):

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

android:windowSoftInputMode="adjustResize"

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

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

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

<EditText
...
android:inputType="textNoSuggestions|textVisiblePassword" />

Ответ 6

просмотр recycler работает лучше всего и не нужно возиться с любыми другими свойствами в любом месте.