ListPreference仅返回默认值

时间:2012-06-21 07:28:05

标签: android android-preferences

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

1 个答案:

答案 0 :(得分:1)

我相信你用getPreferenceManager().setSharedPreferencesName(PREF_FILENAME);指定一个特定的偏好文件名 但是后来你试图从默认偏好.getDefaultSharedPreferences(getBaseContext());

获得偏好值

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

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