ListView прокручивает вверх, когда EditText Rrows

У меня есть Listview с EditTexts в каждой ячейке. Всякий раз, когда я добавляю текст к точке, в которой EditText растет 1 строка, Listview прокручивается вверх (и обычно удаляет EditText из представления, делая это).

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

ListView прокручивает вверх, когда печатает в многострочном EditText

Listview с edittext - автоматический прокрутка дальше и далее

EDIT: После большого количества исследований я обнаружил, что это связано с изменением размера editText, что приводит к тому, что ListView компонует его вложенные объекты, а затем возвращается к началу. Я хочу найти способ для EditText расти, оставаясь на том же месте.

Я попробовал это из-за предложения, которое я нашел в Интернете, но, несмотря на то, что он держит Listview на правильной высоте, он очищает фокус от EditText, и я не могу вернуть его с помощью requestFocus.

private Stirng getTextWatcher(){
return new TextWatcher(){
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override public void afterTextChanged(Editable s) { 
listView.setSelection(index);
  }
 }
}

Так что мне нужно будет:

  • У вас есть способ, чтобы Listview не прокручивался автоматически вверх, когда дополнительные объекты снова выкладываются или

  • Способ сфокусировать мой EditText после вызова ListView.setSelected() или 3. Иметь другой способ прокрутки Listview, который не очистит фокус от EditText.

Для параметра

  1. Я пробовал scrollTo() и smoothScrollToPosition(). scrollTo по какой-то причине работает, но скрывает определенные элементы из Listview (они становятся невидимыми, а не загружаются). И smoothScrollToPosition() создает анимацию, в которой Listview переходит к вершине, а затем возвращает пользователя к элементу (и делает это 2 или 3 раза).

Ответ 1

Как показано на рисунке, если вы хотите вводить ввод из ListView элемента с помощью EditText, тогда вы должны использовать TextView на месте EdiText и нажав TextView, вы должны открыть и Input Dialog с EditText, что является более простым и хорошим решением. обработка фокуса EditText в ListView отличается сложностью, и для этого вам нужно добавить дополнительные Listeners.

ИЛИ

И если у вас ограниченное количество полей ввода в UI/UX, вы можете реализовать EditText с помощью CustomListView с помощью ScrollViews.

Ответ 2

ListView прокручивается вверх, когда EditText Rrows

ListView имеет некоторые известные ограничения, связанные с детским фокусом.

Решение

Почему вы не пытаетесь использовать RecyclerView вместо ListView? Google представил RecyclerView как рекомендуемый по умолчанию способ такого интерфейса. Так что пользовательский ListView или хаки руды больше не нужны.

Ответ 3

Вы можете попробовать добавить этот атрибут в свой ListView:

android:transcriptMode="normal"

Это делает список автоматически прокручиванием вниз, когда принимается уведомление об изменении набора данных, и только если последний элемент уже отображается на экране.

Подробнее здесь: attr_android: transcriptMode | Разработчики Android