我可以让用户使用内置偏好系统指定一些设置。我的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>
然后我将它(首选项模块)加载到我的Activity中就像这样:
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对话框中选择正确的值!
答案 0 :(得分:1)
我相信你用getPreferenceManager().setSharedPreferencesName(PREF_FILENAME);
指定一个特定的偏好文件名
但是后来你试图从默认偏好.getDefaultSharedPreferences(getBaseContext());
这就像将数据写入表PERSON,但后来试图在表DEFAULT中找到它
删除首选项文件名的设置,或从您指定的首选项文件中获取值