Сохранить состояние переключателя для каждого элемента представления списка

Обзор

У меня есть список элементов в моем представлении списка. При нажатии любого элемента запускается следующее действие, и в этом действии есть несколько текстов редактирования и три переключателя в группе переключателей. Я назвал эти переключатели «присутствует», «отсутствует» и «перевод».

Проблема и то, чего я хочу достичь

Теперь мне удалось сохранить состояние переключателей, так что если какой-либо из переключателей отмечен, а затем активность закрывается, состояние переключателя будет сохранено. Но моя проблема заключается в том, что всякий раз, когда значение сохраняется при закрытии активности, все элементы представления списка меняют свои состояния радиокнопок на это сохраненное состояние.

Объяснение проблемы с примером

Допустим, у меня есть три элемента, которые являются учителями в моем представлении списка. 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();
            }

Пожалуйста, помогите любому


person Community    schedule 07.06.2017    source источник
comment
почему бы вам просто не сделать поле в вашей модели данных? передайте ту же модель для следующего действия и сделайте свой переключатель отмеченным/не отмеченным на основе значения модели.   -  person Junaid Hafeez    schedule 07.06.2017
comment
Я не уверен, что SharedPreferences будет лучшей технологией для этого - я имею в виду, что это просто, но эффективно только в том случае, если у вас всегда будет небольшой объем данных для обработки (вы должны создать "answers1", "answers2" и т. д. и SharedPreferences не был создан для этого варианта использования)... Локальная база данных была бы лучшим решением для описанной выше задачи. Мои предложения: SQLite или Область.   -  person Geryson    schedule 07.06.2017
comment
@ Герисон, сэр, возможно, вы не поняли мою точку зрения. Я могу сохранить значения, но эти сохраненные значения отображаются в каждом элементе списка.   -  person    schedule 07.06.2017
comment
У вас может быть только одно значение с ключом "answers". Но вы загружаете значение ТО ЖЕ ОДНО в свою активность (например, Present) каждый раз, когда запускаете ее (и вы ее запускаете < i>в каждом элементе списка). И благодаря этому вы каждый раз будете получать один и тот же результат: Present. Вы просто перезаписываете значение "answers" каждый раз, когда сохраняете настройку, а не создаете другую, и это должно обрабатываться с помощью локальной базы данных.   -  person Geryson    schedule 07.06.2017
comment
Спасибо за объяснение. Я начал работать над вашим решением :)   -  person    schedule 07.06.2017