通过共享首选项保存“ if语句”和统计信息

时间:2018-07-27 12:48:46

标签: android sharedpreferences bundle

我正在研究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);

}

}

4 个答案:

答案 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 中应该更新代码和颜色。