#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()), а не содержимое этих виджетов.
Комментариев нет:
Отправить комментарий