Как сохранить логические значения, чтобы я мог использовать их при возвращении к этой деятельности? - PullRequest
1 голос
/ 29 мая 2019

Я делаю тестовый выбор приложения.В этом тесте вы сможете вернуться, когда захотите изменить ответ.Каждый вопрос - это отдельная деятельность.Чтобы вернуться назад и принять другой ввод, моей программе необходимо распознать, какая кнопка была ранее нажата (если есть), поэтому код ниже.

Главное, что я не знаю, как выяснить,, как мне изменить этот код, чтобы он мог сохранять логические значения, когда вы вернетесь на эту страницу.

//defining the booleans    
public boolean Clicked1 = false;
public boolean Clicked2 = false;
public boolean Clicked3 = false;
public boolean Clicked4 = false;

//defining my button
mButtonChoice1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            if (Clicked1 || Clicked2 || Clicked3 || Clicked4){
                if (Clicked1) {
                    NextPage();
                }else if (Clicked2) {
                    Clicked1 = true;
                    Clicked2 = false;
                    NextPage();
                }else if (Clicked3){
                        Clicked1 = true;
                        Clicked3 = false;
                        NextPage();
                }else {
                        Clicked1 = true;
                        Clicked4 = false;
                        NextPage();
                }
            }else {
                Clicked1 = true;
                NextPage();
            }
        }
    });`

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Я думаю, что вы ищете SharedPreferences.Данные в SharedPrefences сохраняются во внутренней памяти вашего приложения.Для начала:

Инициализируйте ваши SharedPreferences в onCreate().

Сохранение данных в SharedPrefences

// You need a static String variable for identifying your preference 
public static final String CHOICE_PREF = "MyOptions";
SharedPreferences.Editor editor = getSharedPreferences(CHOICE_PREF, MODE_PRIVATE).edit();
editor.putBoolean("Clicked1_state", Clicked1); //("Id key", Value)
editor.putBoolean("Clicked2_state", Clicked2);
editor.putBoolean("Clicked3_state", Clicked3);
editor.putBoolean("Clicked4_state", Clicked4);
editor.apply();

Получение данных из SharedPrefences

SharedPreferences prefs = getSharedPreferences(CHOICE_PREF, MODE_PRIVATE); 
Boolean Clicked1 = prefs.getBoolean("Clicked1_state", false);//This will get the last state of Clicked1 
Boolean Clicked2 = prefs.getBoolean("Clicked2_state", false);
Boolean Clicked3 = prefs.getBoolean("Clicked3_state", false);
Boolean Clicked4 = prefs.getBoolean("Clicked4_state", false);

Таким образом, в идеале, когда ваша активность входит в onStop(), сохраните ваши настройки, а когда ваша активность onResume(), получите сохраненные настройки.

Дополнительная информация о SharedPrefences: Здесь

0 голосов
/ 29 мая 2019

Проблема в том, что вы используете анонимный класс .Так называется конструкция new View.OnClickListener(){.Когда вы обращаетесь к переменным внутри анонимного класса, они должны быть окончательными.В вашем случае переменные Clicked1 / 2/3/4 не являются окончательными, и поэтому вы не можете изменить и сохранить результат.

У вас есть несколько вариантов:

Альтернатива 1 Использование шаблона состояния.Вместо анонимного класса создайте реальный класс, который выходит из View.OnClickListener, создайте класс State, в котором находится ваше общее состояние, и поделитесь им между слушателем действия и классом, содержащим кнопки.Таким образом, ваше состояние будет доступно и изменено.

Вот статья, описывающая шаблон состояния https://dzone.com/articles/design-patterns-state

Здесь очень подробно описана реализация шаблона состояния с использованием Swing.https://hal.inria.fr/inria-00538334/PDF/SwingStates.pdf

Альтернативой 2 будет использование какого-либо хранилища для хранения состояния в виде файла или базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...