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