如果应用程序重新打开 SharedPreferences 不保存布尔值

if application re-open SharedPreferences not saving boolean

我的项目中有以下代码 menu.class

f1 =(Button)findViewById(R.id.f1);      
f1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v){
        // TODO Auto-generated method stub
        Intent intent = new Intent ();
        intent.setClassName ("com.example.aplication", "com.example.application.levelone");
        startActivityForResult (intent, 0);              
    }             
}); 
}

public void onActivityResult (int requestCode, int resultCode, Intent intent) {
    super.onActivityResult (requestCode, resultCode, intent);

    f2=(Button)findViewById(R.id.f2);      
    f2lock=(ImageView)findViewById(R.id.f2lock);

    switch (resultCode) {
        case 11: f2.setVisibility(View.VISIBLE);
                 f2lock.setVisibility(View.GONE);               
    }                                  
    SharedPreferences preferences = getSharedPreferences("preferences", MODE_PRIVATE);
    boolean levelTwoUnlocked = preferences.getBoolean("f2", true);

    if(levelTwoUnlocked){
        f2.setVisibility(View.VISIBLE);
        f2lock.setVisibility(View.GONE);
    }
    else {
        f2.setVisibility(View.GONE);
        f2lock.setVisibility(View.VISIBLE);
    } 

    f2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v){
            Intent intent = new Intent ();
            intent.setClassName ("com.example.application", "com.example.application.leveltwo");
            startActivityForResult (intent, 0);              
        }             
    });     
}

代码运行良好。 f2 按钮设置为可见,f2lock 不可见。 但是当我重新打开应用程序时,f2 按钮又恢复可见。 我的首选项代码没有完成吗?

已更新

我已经像这样更改了首选项代码

    SharedPreferences preferences = getSharedPreferences("preferences", MODE_PRIVATE);
    SharedPreferences.Editor ed = preferences.edit();
    boolean levelTwoUnlocked = preferences.getBoolean("f2", true);
    ed.commit();                

当我重新打开应用程序时,它仍然有同样的问题

您正在检索 f2 的值,但您似乎没有将其保存在任何地方。

preferences.getBoolean("f2", true);

如果 f2 不存在,这将 return f2true 的最后保存值(即您从未将其保存在您的 SharedPreference 实例中) - 它不会为您在 SharedPreferences 实例中创建或保存任何值。

要保存该值,您需要创建一个 SharedPreferences 编辑器,设置要保存的一个(或多个)值并提交:

SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("f2", levelTwoUnlocked);
editor.commit();

现在您下次读取 f2 值时,它将具有您上次提交的任何值。