如何保存布尔值以便我在返回此 activity 时可以使用它们?

How to save booleans so i can use them when coming back to this activity?

我正在制作一个学习选择测试应用程序。在此测试中,您应该可以在想要更改答案时返回。每个问题都是不同的 activity。 为了返回并接受不同的输入,我的程序需要识别之前按下的按钮(如果有的话),因此有下面的代码。

我不知道如何解决的主要问题是如何修改此代码,以便它可以在您返回此页面时保存布尔值。

//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();
            }
        }
    });`

我认为您正在寻找的是 SharedPreferences。 SharedPrefences 中的数据保存在您的应用程序内部存储中。所以开始:

onCreate() 中初始化您的 SharedPreferences。

在 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);

因此,理想情况下,当您的 activity 输入 onStop() 时,保存您的首选项,当您的 activity onResume() 检索您保存的首选项。

有关 SharedPrefences 的更多信息:Here

问题是您使用的是 annonimous class。这就是调用 new View.OnClickListener(){ 结构的方式。当您从匿名 class 中访问变量时,它们需要是最终的。在您的情况下,theClicked1/2/3/4 变量不是最终变量,这就是您无法修改和保留结果的原因。

您有两个选择:

备选方案 1 使用状态模式。而不是匿名 class 创建一个真正的 class 从 View.OnClickListener 扩展创建一个状态 class 在你的共享状态所在的位置并在动作侦听器和 class 按住按钮。这样你的状态就可以访问和修改了。

这是一篇描述状态模式的文章https://dzone.com/articles/design-patterns-state

这里是关于使用 swing 的状态模式的非常详细的实现。 https://hal.inria.fr/inria-00538334/PDF/SwingStates.pdf

备选方案 2 是使用某种存储方式以文件或数据库的形式保存状态。