[英]set shared preference default programmatically
我有一個共享首選項,沒有在xml中定義默認值,因為我想在創建主要活動時以編程方式設置默認值。 有問題的首選項應該是設備語言(如果可以使用該語言),否則應該是第一種可用的語言,其中在相應的xml中將這些語言定義為字符串數組。
我目前在主要活動的onCreate方法中具有以下內容
SharedPreferences preferences = getSharedPreferences(
getString(R.string.shared_prefs_key),
MODE_PRIVATE
);
String detailLanguage = preferences.getString(
getResources().getString(R.string.detail_display_language),
""
);
if (detailLanguage.isEmpty()) {
String deviceLanguage = Locale.getDefault().getLanguage();
String[] availableLanguages = getResources().getStringArray(R.array.pref_entry_values_detail_display_language);
boolean deviceLanguageSupported = false;
for (String availableLanguage : availableLanguages) {
if (deviceLanguage.equals(availableLanguage)) {
deviceLanguageSupported = true;
break;
}
}
preferences.edit()
.putString(
getResources()
.getString(R.string.detail_display_language),
deviceLanguageSupported ? deviceLanguage : availableLanguages[0]
).commit();
第一次運行時調試該代碼,它會進入上述if語句並設置首選項,但是首選項在第一次活動中未顯示為首選項(如果我本人隨后選擇了它,從那時起,它就好像被選擇為某物) 。
我想念什么嗎? 我剛接觸Android。 我根據其他一些類似的SO問題嘗試了上述方法。
PreferenceActivity
和PreferenceFragment
從默認首選項文件中讀取首選項。 要訪問這些首選項,您應該使用PreferenceManager.getDefaultSharedPreferences(context)方法。
我猜這是您看不到更改的原因:您將它們寫入getString(R.string.shared_prefs_key)
而不是默認值。
嘗試將第一行更改為此:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.