通过共享首选项保存 "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 你应该更新代码和颜色。