2012-06-21 101 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

要麼刪除喜好文件名的設定,或者從您指定