Обзор
У меня есть список элементов в моем представлении списка. При нажатии любого элемента запускается следующее действие, и в этом действии есть несколько текстов редактирования и три переключателя в группе переключателей. Я назвал эти переключатели «присутствует», «отсутствует» и «перевод».
Проблема и то, чего я хочу достичь
Теперь мне удалось сохранить состояние переключателей, так что если какой-либо из переключателей отмечен, а затем активность закрывается, состояние переключателя будет сохранено. Но моя проблема заключается в том, что всякий раз, когда значение сохраняется при закрытии активности, все элементы представления списка меняют свои состояния радиокнопок на это сохраненное состояние.
Объяснение проблемы с примером
Допустим, у меня есть три элемента, которые являются учителями в моем представлении списка. A, B и C. Когда я нажимаю на элемент A, начинается действие под названием «Посещаемость». Точно так же, когда я нажимал на B или C, начиналась активность Attendance. Теперь, если я нажимаю на элемент A и отмечаю посещаемость как Present и сохраняю состояние, тогда, когда я открываю элемент B или элемент C, он будет покажите мне настоящее, хотя я не изменил значение в элементе B или C. Я просто сохранил значение для элемента A, но он также показывает изменения в элементе B и C. Я не знаю, что делать в этом случае, чтобы сохранить радиокнопку состояние для каждого элемента списка
Что я пробовал
Это то, что я делаю в своем методе Oncreate в активности Attendance.
SharedPreferences settings = getSharedPreferences("answers", MODE_PRIVATE);
boolean r2achecked = settings.getBoolean("r2a",false);
boolean r2bchecked = settings.getBoolean("r2b",false);
boolean r2cchecked = settings.getBoolean("r2c",false);
if (r2achecked == true)
{
one.setChecked(true);
}
else if (r2bchecked == true)
{
two.setChecked(true);
}
if (r2cchecked == true)
{
three.setChecked(true);
}
и я сохраняю состояния переключателей здесь, в активности посещаемости
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences settings = getSharedPreferences("answers", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("r2a",one.isChecked());
editor.putBoolean("r2b",two.isChecked());
editor.putBoolean("r2c",three.isChecked());
editor.apply();
finish();
}
Пожалуйста, помогите любому
SharedPreferences
будет лучшей технологией для этого - я имею в виду, что это просто, но эффективно только в том случае, если у вас всегда будет небольшой объем данных для обработки (вы должны создать"answers1"
,"answers2"
и т. д. иSharedPreferences
не был создан для этого варианта использования)... Локальная база данных была бы лучшим решением для описанной выше задачи. Мои предложения: SQLite или Область. - person Geryson   schedule 07.06.2017"answers"
. Но вы загружаете значение ТО ЖЕ ОДНО в свою активность (например, Present) каждый раз, когда запускаете ее (и вы ее запускаете < i>в каждом элементе списка). И благодаря этому вы каждый раз будете получать один и тот же результат: Present. Вы просто перезаписываете значение"answers"
каждый раз, когда сохраняете настройку, а не создаете другую, и это должно обрабатываться с помощью локальной базы данных. - person Geryson   schedule 07.06.2017