2012-06-21 103 views
0

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

+1

尝试删除该行偏好文件得到你的价值:'getPreferenceManager()setSharedPreferencesName(PREF_FILENAME);'我remeber有类似的问题任何时候我都可以尝试在PreferenceActivity中做任何事情。它会始终返回默认值。它为你做所有的工作,你不需要担心。只要你喜欢它们就可以使用偏好。 –

+0

另外,您的PREF_OPERATION_SECTION值是多少?确认它等于“operation_section”(以防万一:P) –

回答

1

我相信你getPreferenceManager().setSharedPreferencesName(PREF_FILENAME); 指定特定的偏好设置文件名,但后来你正在试图从默认偏好的偏好值.getDefaultSharedPreferences(getBaseContext());

这就像写数据到表的人,但后来试图找到它的表DEFAULT

要么删除喜好文件名的设定,或者从您指定