如何使用sharedPreferences编写正确的if-else语句?

时间:2015-07-01 02:32:57

标签: android xml sharedpreferences preferences live-wallpaper

我在编写正确的if-else语句时遇到一些麻烦,因为使用复选框首选项来更改我的动态壁纸的背景位图。目前我已调用此方法:

 public void setPreferences(SharedPreferences prefs) {
        //Introduce Preference Variables
        p = prefs;

        //Initialize Preference variables
        final boolean mySetting = PreferenceManager.getDefaultSharedPreferences(mContext)
.getBoolean(String.valueOf(R.string.touch), false);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putBoolean(String.valueOf(mySetting), false);
            editor.commit();

        //If statement to set preference value
        if (prefs.getBoolean(String.valueOf(mySetting), true)) {
            GLUtils.texImage2D(GLES10.GL_TEXTURE_2D, 0, nebula, 0);
        }else{
            GLUtils.texImage2D(GLES10.GL_TEXTURE_2D, 0, stars, 0);
        }


    }

其中R.string.touch是我的XML文档中我的复选框首选项的关键,如下所示:

<CheckBoxPreference
    android:key="@string/touch"
    android:title=""
    android:summary=""
    android:defaultValue="false"/>

所以我的问题是如何编写正确的if-else语句,甚至是一个允许我切换背景位图的switch-case语句?感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

我看到的一个问题是String.valueOf(R.string.touch)将为您提供一个整数作为字符串而不是strings.xml中的字符串值。

以下是另一种方法:

public void setPreferences() {
    final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
    final String key = mContext.getString(R.string.touch_setting_key);
    final boolean defaultValue = false;

    // Read setting's current value.
    final boolean currentValue = preferences.getBoolean(key, defaultValue);

    // Update setting to true.
    preferences.edit()
        .putBoolean(key, true)
        .apply();

    // Use new setting value in an if-statement
    final boolean newValue = preferences.getBoolean(key, defaultValue);

    if (newValue == true) {
        GLUtils.texImage2D(GLES10.GL_TEXTURE_2D, 0, nebula, 0);
    } else {
        GLUtils.texImage2D(GLES10.GL_TEXTURE_2D, 0, stars, 0);
    }
}

我假设您将您的密钥名称存储在XML中,如下所示:

<string translatable="false" name="touch_setting_key">touch_setting_key</string>

在更多地方使用设置时,可以将首选项变量与类实例一起存储为mPreferences,并从onCreate()初始化它。

您还可以在XML中存储默认值。对于布尔值,您可以这样做:

<item name="defaultTouchSetting" format="boolean" type="bool">true</item>

要从代码中读取,请执行以下操作:

final boolean defaultValue = mContext.getResources().getBoolean(R.bool.defaultTouchSetting);

如果您仍然坚持任何事情,请告诉我。

答案 1 :(得分:0)

问题可能在于您如何访问sharedPreferences。在过去,当我使用共享首选项时,我使用了一个稍微不同的方法:getActivity()。getSharedPreferences()。在研究PreferencManager.getDefault首选项与Context.getSharedPreferences时,我发现了这篇文章。 Android getDefaultSharedPreferences我会尝试更换

PreferenceManager.getDefaultPreferences(mContext);

mContext.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE);

“myAppPrefs”是任意键。

我希望这会有所帮助。祝你好运!