我有設置功能讓用戶使用內置的偏好系統指定一些設置。我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對話框下被選中!
嘗試刪除該行偏好文件得到你的價值:'getPreferenceManager()setSharedPreferencesName(PREF_FILENAME);'我remeber有類似的問題任何時候我都可以嘗試在PreferenceActivity中做任何事情。它會始終返回默認值。它爲你做所有的工作,你不需要擔心。只要你喜歡它們就可以使用偏好。 –
另外,您的PREF_OPERATION_SECTION值是多少?確認它等於「operation_section」(以防萬一:P) –