Ответ 1
Все, что вам действительно нужно сделать, это применить это к списку ListView:
XML:
android:descendantFocusability="afterDescendants"
Java:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
Я искал и искал ответ на этот вопрос, и все, что выглядело как ответ, не сработало, поэтому, я думаю, я просто спрошу.
У меня есть пара блоков EditText
, добавленных в ListView
, которые являются основой для ListActivity
. Когда я устанавливаю windowSoftInputMode
в adjustPan
и нажимаю , он работает, пока вы не нажмете на него снова, а затем клавиатура закрывает его. Когда я использую adjustResize
, он работает, только когда клавиатура появляется, EditText
теряет фокус, и я должен снова нажать на нее, чтобы напечатать.
Я пытался выяснить, как поймать onResize
, но похоже, что он связан с представлением, а не с активностью, и я не совсем уверен, как его слушать. Я также пробовал всевозможные настраиваемые настройки в EditText
и самом ListView
(как это было предложено в других прочитанных сообщениях), которые также не помогают.
Все, что вам действительно нужно сделать, это применить это к списку ListView:
XML:
android:descendantFocusability="afterDescendants"
Java:
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
Вы пробовали после того, как сделали adjustResize
, чтобы reset сосредоточиться на EditText
, сделав что-то вроде EditText.requestFocus();
, чтобы он снова сфокусировался, и пользователю не нужно снова использовать его. вы можете использовать EditText.isFocused()
, чтобы увидеть, сфокусировано (true) или нет (false) в операторе журнала отладки или что-то еще.
вам может потребоваться установить поле focusable
, используя SetFocusable()
, но будьте осторожны, поскольку это может потенциально убрать фокус с самого ListView
и не позволит вам прокручивать или выбирать вещи позже, поэтому вам придется играть с настройкой, настраиваемой и ориентированной.
У меня возникла такая же проблема в моем проекте.
Чтобы решить проблему, я подклассифицировал EditText
и нажал кнопку "Назад", чтобы убедиться, что мой EditText
очищает фокус в этот момент.
Проверьте это решение, как это сделать.
Удачи.
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
Для меня мне помогла комбинация (особенно номер 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" />
просмотр recycler работает лучше всего и не нужно возиться с любыми другими свойствами в любом месте.