我在编写正确的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语句?感谢您提供任何帮助。
答案 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”是任意键。
我希望这会有所帮助。祝你好运!