Android получает текст из EditText в GridView

#android #string #gridview #textview #android-edittext

#Android #строка #просмотр сетки #textview #android-edittext

Вопрос:

У меня есть GridView, который отображает пользовательский макет в несколько десятков строк, каждая из которых состоит из EditText и объекта TextView.

Если я правильно понимаю, я должен расширить класс BaseAdapter для достижения этой цели. Если да, то как я могу получить доступ к определенному объекту EditText?

Кроме того, приведет ли повторное использование представлений к потере текста, введенного пользователем, если одно из представлений EditText больше не отображается?

Есть ли более простое средство для выполнения того, что я здесь описываю (возможно, что-то другое, чем GridView)?

Комментарии:

1. вы нашли решение для этого?

Ответ №1:

При расширении BaseAdapter один из методов, который вам приходится переопределять, является getView(...) . В этом методе вы создаете представление, которое необходимо отобразить. Если вы хотите сохранить текст, введенный в EditText , что вам нужно сделать, это установить a TextWatcher в EditText, передавая позицию EditText (параметр в getView(...) ), и всякий раз, когда текст изменяется, сохранять текст в массиве сортировки. Затем, всякий раз, когда эта позиция возвращается с помощью getView(...) метода, извлеките текст из массива и заполните EditText .

Комментарии:

1. Звучит выполнимо, но сложно. Было бы намного проще просто использовать TableLayout для этого (количество строк не должно превышать 100)?

2. Если все ваши ячейки идентичны в том смысле, что в каждой из них есть EditText и TextView, то было бы не проще использовать TableLayout. Преимущество использования адаптера заключается в том, что позиции, которые находятся за пределами экрана, не сохраняются в памяти, что обеспечивает небольшой объем памяти. Всякий раз, когда вы прокручиваете, виды, удаляющиеся с экрана, повторно используются для создания представлений, появляющихся на экране.

3. Я вижу, что когда я использую TextWatcher, есть три метода, которые я вынужден переопределить. Чтобы обновить мой массив строк обновленным текстом, я должен знать, к какому объекту EditText принадлежит этот новый текст (который я использую для получения правильного индекса в моем массиве строк). «Знает» ли редактируемый объект, какой это?

4. Вот почему я говорил передавать позицию при создании пользовательского TextWatcher класса. Имейте в виду также, что вы «добавляете» TextWatchers, поэтому вы можете назначить несколько из них одному EditText. Имейте это в виду, чтобы не добавлять дополнительные средства просмотра текста при повторном просмотре представления.

Ответ №2:

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

TextView и EditText должны быть заполнены из этого списка.