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
.
Для параметра
- Я пробовал
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