2016-10-30 154 views
1

如果在首選項中更改了首選項的類型,該怎麼辦?例如,如果Boolean更改爲ListPreferenceAndroid共享首選項類型遷移

谷歌真的沒有人想過偏好遷移?

唯一明智的辦法,現在似乎版本的喜好和標記爲刪除喜好與給定的版本改變了..?

+2

只是改變偏好名字,爲什麼不呢?如果它是「type_pref」調用新的「type_pref1」並忽略之前的 –

回答

1

嘗試讀取新的數據類型鍵,在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)) ...只有一次需要。

+0

謝謝:-)我已經注意到ClassCastException的重要性作爲可能的設置更改/完整性問題。同時刪除舊密鑰並使用默認值重新創建它們是我的選擇:-) – CeDeROM

0

我做了一些對原材料SharedPreferences工作,並不需要一個PreferenceFragment:

  • 介紹設置的版本。
  • 首選項使用專用xml字符串存儲在xml資源中。
  • 拆分代碼以加載,遷移,設置應用程序啓動時的默認設置。
  • 創建了兩個字符串數組版本和密鑰 - 記錄首選項更改 - 密鑰是一個逗號分隔的字符串 - 具有相同的索引,該對保留關於給定版本遷移的信息。
  • 從存儲的設置檢查當前版本,並確認與存儲在字符串數組版本中,如果其目前的版本是舊的(較小的數字)然後刪除在鍵字符串數組具有相同索引提供的密鑰(需要字符串分割)並重新使用默認值創建它們。

這給我設置遷移的一個很好的方式,對字符串的XML資源完全基於和更改代碼,也應該遷移步步皆以下版本,如果用戶不經常更新的應用程序:-)

這也是很好的標記近期的最新更改用戶檢查遷移..