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

时间:2019-05-29 18:57:23

标签: java boolean android-studio-3.0

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

我不知道如何弄清楚的主要事情是如何修改此代码,因此当您返回此页面时,它可以节省布尔值。

//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 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是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);

因此,理想情况下,当您的活动进入onStop()时,保存您的偏好设置,而当您的活动onResume()时,检索您保存的偏好设置。

有关SharedPrefences的更多信息:Here

答案 1 :(得分:0)

问题是您正在使用匿名课程。这就是new View.OnClickListener(){构造的调用方式。当您从匿名类中访问变量时,它们必须是最终的。在您的情况下,Clicked1 / 2/3/4变量不是最终变量,这就是为什么您无法修改和保留结果的原因。

您有两种选择:

替代 1使用状态模式。代替匿名类,创建一个从View.OnClickListener扩展的真实类,创建一个共享状态所在的State类,并在动作侦听器和持有按钮的类之间共享状态。这样,您的状态将可以访问和修改。

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

的文章

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

替代2 是使用某种类型的存储来以文件或数据库的形式保存状态。