通过共享首选项保存 "if-statements" 和统计数据
Saving "if-statements" and stats via shared preferences
我正在开发一个 Quizz-App,想创建一个升级游戏。如果用户得分超过 5 分,按钮 "klasse 2" 应该改变颜色。
现在,如果达到 5 分,它就会像预期的那样改变颜色。唯一的问题是,如果我关闭应用程序或按后退按钮,颜色就会消失并出现旧颜色。
我不知道我在 sharedPrefs 上做错了什么。由于我是初学者,我对这个话题不是很感兴趣,希望你们能帮帮我。
谢谢!
public class Levels extends AppCompatActivity {
Button klasse1, klasse2, klasse3, klasse4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_levels);
klasse1 = (Button) findViewById(R.id.class1btn);klasse2 = (Button) findViewById(R.id.class2btn);
klasse3 = (Button) findViewById(R.id.class3btn);klasse4 = (Button) findViewById(R.id.class4btn);
Bundle bundle = getIntent().getExtras();
if (bundle != null){
int score = bundle.getInt("finaleScore");
if (score >= 5){
klasse2.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
}
saveData(getResources().getColor(R.color.colorPrimaryDark));
saveData(score);
}
klasse1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent openK1 = new Intent(Levels.this, Class1.class);
startActivity(openK1);
}
});
}
public void saveData(int t){
SharedPreferences mSharedPrefs = getSharedPreferences("instrasparent", MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSharedPrefs.edit();
mEditor.putInt("instransparentField", t);
mEditor.commit();
}
@Override
public void onBackPressed() {
Intent backMain = new Intent(Levels.this, MainActivity.class);
startActivity(backMain);
}
}
打开新 activity 后,您可能需要关闭以前的 activity。你可以使用 finish().
还有一件事,当你想回到之前的 activity 时,你必须让 Bundle 将所有值转移到之前的 activity。
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(Levels.this, MainActivity.class));
finish();
}
我认为您将颜色 ID 和分数保存在相同的首选项键中,请使用不同的键来保存颜色 ID 和分数
堆栈中的前一个 Activity
没有加载新颜色,尽管您已将其保存到 SavedPreferences 中。
尝试覆盖 Activity
:
的 onResume()
方法
@Override
public void onResume() {
super.onResume();
// Check if the color changed loading it in SharedPreferences, and change it if needed
}
这样,当你返回时,你的Activity
会检查颜色是否应该改变,并妥善处理。
我不知道你是如何处理其他 activity 中的 SharedPreferences 的,但是从你当前的代码来看,你正在用 SharedPreferences 中的分数覆盖 res。您在同一键上保存背景和分数。
saveData(getResources().getColor(R.color.colorPrimaryDark));
saveData(score);
试试这个:
saveData(getResources().getColor(R.color.colorPrimaryDark), score);
...
public void saveData(int col, int scores){
SharedPreferences mSharedPrefs = getSharedPreferences("instrasparent", MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSharedPrefs.edit();
mEditor.putInt("instransparentFieldCol", col);
mEditor.putInt("instransparentFieldScore", scores);
mEditor.commit();
}
并且在 onResume 你应该更新代码和颜色。
我正在开发一个 Quizz-App,想创建一个升级游戏。如果用户得分超过 5 分,按钮 "klasse 2" 应该改变颜色。 现在,如果达到 5 分,它就会像预期的那样改变颜色。唯一的问题是,如果我关闭应用程序或按后退按钮,颜色就会消失并出现旧颜色。
我不知道我在 sharedPrefs 上做错了什么。由于我是初学者,我对这个话题不是很感兴趣,希望你们能帮帮我。
谢谢!
public class Levels extends AppCompatActivity {
Button klasse1, klasse2, klasse3, klasse4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_levels);
klasse1 = (Button) findViewById(R.id.class1btn);klasse2 = (Button) findViewById(R.id.class2btn);
klasse3 = (Button) findViewById(R.id.class3btn);klasse4 = (Button) findViewById(R.id.class4btn);
Bundle bundle = getIntent().getExtras();
if (bundle != null){
int score = bundle.getInt("finaleScore");
if (score >= 5){
klasse2.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
}
saveData(getResources().getColor(R.color.colorPrimaryDark));
saveData(score);
}
klasse1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent openK1 = new Intent(Levels.this, Class1.class);
startActivity(openK1);
}
});
}
public void saveData(int t){
SharedPreferences mSharedPrefs = getSharedPreferences("instrasparent", MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSharedPrefs.edit();
mEditor.putInt("instransparentField", t);
mEditor.commit();
}
@Override
public void onBackPressed() {
Intent backMain = new Intent(Levels.this, MainActivity.class);
startActivity(backMain);
}
}
打开新 activity 后,您可能需要关闭以前的 activity。你可以使用 finish().
还有一件事,当你想回到之前的 activity 时,你必须让 Bundle 将所有值转移到之前的 activity。
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(Levels.this, MainActivity.class));
finish();
}
我认为您将颜色 ID 和分数保存在相同的首选项键中,请使用不同的键来保存颜色 ID 和分数
堆栈中的前一个 Activity
没有加载新颜色,尽管您已将其保存到 SavedPreferences 中。
尝试覆盖 Activity
:
onResume()
方法
@Override
public void onResume() {
super.onResume();
// Check if the color changed loading it in SharedPreferences, and change it if needed
}
这样,当你返回时,你的Activity
会检查颜色是否应该改变,并妥善处理。
我不知道你是如何处理其他 activity 中的 SharedPreferences 的,但是从你当前的代码来看,你正在用 SharedPreferences 中的分数覆盖 res。您在同一键上保存背景和分数。
saveData(getResources().getColor(R.color.colorPrimaryDark));
saveData(score);
试试这个:
saveData(getResources().getColor(R.color.colorPrimaryDark), score);
...
public void saveData(int col, int scores){
SharedPreferences mSharedPrefs = getSharedPreferences("instrasparent", MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSharedPrefs.edit();
mEditor.putInt("instransparentFieldCol", col);
mEditor.putInt("instransparentFieldScore", scores);
mEditor.commit();
}
并且在 onResume 你应该更新代码和颜色。