我有设置功能让用户使用内置的偏好系统指定一些设置。我preference.xml很简单,只有一个ListPreference:ListPreference仅返回默认值
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" android:persistent="true">
<PreferenceCategory android:title="Your nuSTOCK Settings" android:persistent="true">
<ListPreference android:key="operation_section" android:entries="@array/array_nustock_section_values" android:summary="What's your operational section in nuSTOCK?" android:entryValues="@array/array_nustock_section_keys" android:title="Operation Section" android:negativeButtonText="Cancel" android:positiveButtonText="OK" android:persistent="true" android:enabled="true"/>
</PreferenceCategory>
</PreferenceScreen>
引用我的阵列,它们分别是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="array_nustock_section_keys">
<item>store</item>
<item>branch</item>
</string-array>
<string-array name="array_nustock_section_values">
<item>Store</item>
<item>Branch</item>
</string-array>
</resources>
然后我把它(偏好模块)加载到我的活动就像这样:
nustock_preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
此后我然后提示用户设置的值(从只有两个选项中进行选择),通过经由意图调用偏好活性:
Intent settingsActivity = new Intent(this,
MyPreferenceActivity.class);
startActivity(settingsActivity);
的偏好活动就像这样:
public class MyPreferenceActivity extends PreferenceActivity {
private static final String PREF_FILENAME = "nustock_preferences";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName(PREF_FILENAME);
addPreferencesFromResource(R.xml.preferences);
}
}
然后我尝试读取用户这样的偏好设定值:
nustock_preferences = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
String op = nustock_preferences.getString(PREF_OPERATION_SECTION,"none");
Log.d(Tag,String.format("Operation Section : %s", op));
问题:
无论我选择什么样的偏好值,只有我得到的价值是默认的“无”(我实际上已添加与列表中的实际值不同,只是为了突出显示问题 - 选定的值永远不会返回!)。
那么,我做错了什么?我已经尝试了这种方法的许多变体,但我无法获得用户所选的偏好!即使尝试重新启动应用程序(希望偏好设置在启动时,没有什么!)
但有趣的是,每当我加载首选项屏幕,正确的值仍然在ListPreference对话框下被选中!
尝试删除该行偏好文件得到你的价值:'getPreferenceManager()setSharedPreferencesName(PREF_FILENAME);'我remeber有类似的问题任何时候我都可以尝试在PreferenceActivity中做任何事情。它会始终返回默认值。它为你做所有的工作,你不需要担心。只要你喜欢它们就可以使用偏好。 –
另外,您的PREF_OPERATION_SECTION值是多少?确认它等于“operation_section”(以防万一:P) –