2016-05-15 6 views
0

Как уже известно, в базе знаний,ListView Как получить предметы, которые не показаны?

listView.getChildAt() 

вернет нулевой объект, когда элемент не shown.So я пытался использовать

listView.getAdapter().getView(i, null, null).findViewById(...) 

Проблема, кажется, что содержание я получаю в этот способ не изменится динамически. У меня есть TextView с подсказкой, после ввода текста и подтверждения, я могу получить подсказку, пока текст пуст. Пожалуйста, помогите мне узнать, как получить контент, если элемент не отображается.

ответ

0

Я предполагаю, что вы используете EditText, а не TextView.

Вы должны заметить, что при вызове этого:

listView.getAdapter().getView(i, null, null) 

Он часто возвращает новый вид, потому что convertView == NULL. Таким образом, вы получили новый EditText без заполнения введенного пользователем текста (текст пуст).

Я не понимаю, почему вы хотите получить содержимое невидимого элемента в ListView. Поэтому довольно сложно предложить решение этой проблемы.

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

+0

Я имел в виду, что когда элемент списка выходит из экрана, как получить данные внутри. – MashPlant

+0

Да, теперь я понял вашу проблему. Вы знаете, что ListView использует механизм рециркуляции для элементов. Это означает, что каждый элемент после прокрутки экрана будет повторно использован для отображения другого, который прокручивается в экран. Все данные старого элемента будут заменены новыми данными. Таким образом, вы не можете получить старый контент EditText, если вы его не сохранили раньше. Попробуйте решение в моем ответе: с помощью TextWatcher и сохраните текст в списке. – Ken

Смежные вопросы