我有设置能力让用户使用内置的偏好系统指定一些设置。我的preference.xml 很简单,只有一个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 调用偏好活动来提示用户设置值(仅从两个选项中选择):
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 对话框下选择正确的值!