SharedPreferences编辑和保存

3
这是我的设置菜单,它由9个图像按钮组成,根据偏好应更改图像。当按下图像按钮时,它应更改首选项的布尔值,以便另一个活动可以相应地执行。
目前,它基于默认值填充图像按钮,但在设置菜单中进行的更改似乎不是永久性的。
public class SettingsActivity extends PreferenceActivity {
    ImageButton[] level = new ImageButton[9];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        PreferenceManager.getDefaultSharedPreferences(this).edit().clear().commit();
        PreferenceManager.setDefaultValues(this, R.xml.preferences, true);

        level[0] = (ImageButton) findViewById(R.id.imageButton);
        level[1] = (ImageButton) findViewById(R.id.imageButton2);
        level[2] = (ImageButton) findViewById(R.id.imageButton3);
        level[3] = (ImageButton) findViewById(R.id.imageButton4);
        level[4] = (ImageButton) findViewById(R.id.imageButton5);
        level[5] = (ImageButton) findViewById(R.id.imageButton6);
        level[6] = (ImageButton) findViewById(R.id.imageButton7);
        level[7] = (ImageButton) findViewById(R.id.imageButton8);
        level[8] = (ImageButton) findViewById(R.id.imageButton9);

        PopulateButtons();

    }

            public void PopulateButtons(){
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
                for (int i = 0; i < 9; i++) {
                    String prefKey = String.format("lev%s", i);
                    System.out.println(prefKey);
                    if (preferences.getBoolean(prefKey, false) == true) {
                        level[i].setBackgroundResource(R.mipmap.settings_verbs);
                        level[i].setOnClickListener(mySettingsHandler);
                    } else {
                        level[i].setBackgroundResource(R.mipmap.ic_launcher);
                        level[i].setOnClickListener(mySettingsHandler);
                    }

                }
            }


        View.OnClickListener mySettingsHandler = new View.OnClickListener() {
            public void onClick(View v) {
                Context context = getApplicationContext();
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
                System.out.println("Running populate method");
                for (int i = 0; i < 9; i++) {
                    if (v.getId() == level[i].getId()) {
                        String prefKey = String.format("lev%s", i);
                        if (preferences.getBoolean(prefKey, false) == false) {
                            System.out.println("Yep");
                            SharedPreferences.Editor editor = preferences.edit();
                            editor.putBoolean(prefKey, true);
                            editor.commit();
                            level[i].setBackgroundResource(R.mipmap.settings_verbs);
                        } else {
                            System.out.println("nope");
                            SharedPreferences.Editor editor = preferences.edit();
                            editor.putBoolean(prefKey, false);
                            editor.commit();
                            level[i].setBackgroundResource(R.mipmap.ic_launcher);
                        }
                    }
                }
            }
        };

}

如果 (preferences.getBoolean(prefKey, false) == false) 改为 if if(!preferences.getBoolean(prefKey, false)) ,虽然这不是解决方案,但看起来更好 :) - Konrad Krakowiak
5
您在每次 onCreate() 方法中清除保存的偏好设置,并将它们重置为默认值。因此,每当活动再次重新创建时,它就不会保留新的偏好设置。 - Prerak Sola
1个回答

0

你每次调用onCreate时都在设置默认值。尝试

if (savedInstanceState == null) {
    PreferenceManager.getDefaultSharedPreferences(this).edit().clear().commit();
    PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接