我正在制作学习选择测试应用。在此测试中,您想更改答案时应该可以返回。每个问题都是不同的活动。 为了返回并接受不同的输入,我的程序需要识别先前已按下的按钮(如果有),因此需要下面的代码。
我不知道如何弄清楚的主要事情是如何修改此代码,因此当您返回此页面时,它可以节省布尔值。
//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();
}
}
});`
答案 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 是使用某种类型的存储来以文件或数据库的形式保存状态。