如果在首選項中更改了首選項的類型,該怎麼辦?例如,如果Boolean
更改爲ListPreference
?Android共享首選項類型遷移
谷歌真的沒有人想過偏好遷移?
唯一明智的辦法,現在似乎版本的喜好和標記爲刪除喜好與給定的版本改變了..?
如果在首選項中更改了首選項的類型,該怎麼辦?例如,如果Boolean
更改爲ListPreference
?Android共享首選項類型遷移
谷歌真的沒有人想過偏好遷移?
唯一明智的辦法,現在似乎版本的喜好和標記爲刪除喜好與給定的版本改變了..?
嘗試讀取新的數據類型鍵,在ClassCastException
異常的情況下,刪除「舊」鍵,並創建具有相同的名稱,但新類型新的密鑰。事情是這樣的:
SharedPreferences prefs;
String key = "key";
prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (prefs.contains(key)) {
// key exists, so tetermine it's type
try {
prefs.edit().get<old_type_name>(key, <default_old_type_value>);
} catch (Exceprtion e) {
if (e instanceOf ClassCastException) {
prefs.edit().remove(key).apply();
}
}
}
// we are here if no key exists or key removed
prefs.edit().put<new_type_name>(key, <new_type_value>).apply();
,如果做第一個應用程序開始檢查if (prefs.contains(key)) ...
只有一次需要。
謝謝:-)我已經注意到ClassCastException的重要性作爲可能的設置更改/完整性問題。同時刪除舊密鑰並使用默認值重新創建它們是我的選擇:-) – CeDeROM
我做了一些對原材料SharedPreferences工作,並不需要一個PreferenceFragment:
這給我設置遷移的一個很好的方式,對字符串的XML資源完全基於和更改代碼,也應該遷移步步皆以下版本,如果用戶不經常更新的應用程序:-)
這也是很好的標記近期的最新更改用戶檢查遷移..
只是改變偏好名字,爲什麼不呢?如果它是「type_pref」調用新的「type_pref1」並忽略之前的 –