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); } } } 

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

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

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

Для опции

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

Solutions Collecting From Web of "ListView прокручивается вверх, когда EditText Rrows"

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

ИЛИ

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

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

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

Решение

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

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

 android:transcriptMode="normal" 

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

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