Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Не сохраняются введенные в EditText значения в ListView

#java #android

                    
У меня в ListView есть 30 элементов. Если в нулевой элементе я что-то напишу, то
при пролистывании вниз эти данные могут оказаться вообще внизу, или даже на месте 4
12 15 28.

Поэтому я решил, что будет лучше, если в ListView отключить как-то пересоздание компонентов.

Или в EditText поймать тот момент, когда человек теряет фокус, чтобы я сохранил данные
в файл, а после - считал их.

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = getLayoutInflater().inflate(R.layout.main_list, null);
    }
    EditText editText = (EditText)convertView.findViewById(R.id.editText);
    editText.setHint("asdsadad");
    // SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
    // sharedPreferences.getString("pos" + position, "");
    return convertView;
}

    


Ответы

Ответ 1



Так как айтемы многократно переиспользуются, вам необходимо позаботиться о восстановлении состояния конкретного айтема в определенной позиции, для этого вам нужно сохранять ввод из EditText-ов в отдельное хранилище, которое будет привязано к позициям в списке и затем использовать эти данные при (пере-)создании айтема. Необходимо не только восстанавливать ввод, но и принудительно очищать EditText, если ввода в нем не было. Смотрите этот ответ для более подробного решения. Для извлечения данных из айтемов списка в EditText при потере фокуса смотрите этот ответ (пункт2). Что вы будете использовать, ListView или RecyclerView не имеет особого значения. Так же как для решения вашей проблемы не подойдет и паттерн ViewHolder (хотя его использование и очень рекомендуется), который хранит только ссылки на виджеты (исключает многократный вызов метода findViewById()), а не содержимое этих виджетов.

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

Отправить комментарий