0

我有设置能力让用户使用内置的偏好系统指定一些设置。我的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 对话框下选择正确的值!

4

1 回答 1

1

我相信您指定了一个特定的首选项文件名,getPreferenceManager().setSharedPreferencesName(PREF_FILENAME); 但后来您尝试从默认首选项中获取首选项值.getDefaultSharedPreferences(getBaseContext());

这就像将数据写入表 PERSON,但后来试图在表 DEFAULT 中找到它

删除首选项文件名的设置,或者从您指定的首选项文件中获取您的值

于 2012-06-21T07:57:51.950 回答