我正在研究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);
}
}
答案 0 :(得分:2)
打开新活动后,也许您需要关闭上一个活动。您可以使用finish()。
还有一件事,当您想返回上一个活动时,您已经使Bundle将所有值转移到了上一个活动。
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(Levels.this, MainActivity.class));
finish();
}
答案 1 :(得分:0)
我认为您正在将颜色ID和得分保存在相同的Prefrences键中,请使用不同的键来保存颜色ID和得分
答案 2 :(得分:0)
堆栈中的前一个Activity
未加载新颜色,尽管已将其保存到SavedPreferences中。
尝试覆盖onResume()
的{{1}}方法:
Activity
这样,当您返回时,@Override
public void onResume() {
super.onResume();
// Check if the color changed loading it in SharedPreferences, and change it if needed
}
将检查颜色是否应该更改并正确处理。
答案 3 :(得分:0)
我不知道您在其他活动中如何处理SharedPreferences,但是从您当前的代码来看,您正在按SharedPreferences中的分数覆盖资源。您要在同一键上保存背景和得分。
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 中应该更新代码和颜色。