![](/img/trans.png)
[英]Android, SharedPreferences default values not set if there is no pref
[英]Android sharedPreferences set default values issue
我在項目中使用了一些活動。 其中之一是從PreferenceActivity擴展的。 我有一個CheckBoxPreference和一個EditTextPreference,我可以使用以下方法從所有其他活動中獲取值:
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
pref = sharedPrefs.getString("edit_text_pref", "error");
但是當我打開我的應用程序時,必須將這些值設置為默認值,因此我正在使用:
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
在我的主要活動中。 一切都應該沒問題,但是如果在從首選項菜單中設置首選項之前嘗試獲取首選項,則會收到“錯誤”,而不是我在xml首選項文件中設置的默認值。 如果我評論getDefaultSharedPreferences
行,則可以正常工作,但很明顯,當我打開該應用程序時,會得到舊的首選項。 我該如何繞過這個問題?
您必須使用此setDefaultValues (Context context, int resId, boolean readAgain)
類似
PreferenceManager.setDefaultValues(this, R.xml.preference, false);
仔細查看參數中的注釋部分。 這是在重復讀取參數
context
共享首選項的上下文。
resId
首選項XML文件的資源ID。
KEY_HAS_SET_DEFAULT_VALUES
為false)時,此方法才設置默認值。 要嘗試繞過此檢查再次設置默認值,請將readAgain設置為true。 getDefaultSharedPreferences(Context)
並清除它,然后調用此方法並將此參數設置為true 所以我想清除它后,您需要通過將readAgain傳遞為true來將其設置為默認值
就像是
PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
PreferenceManager.setDefaultValues(this, R.xml.preference, true);
您正在接收默認值本身,即“錯誤”,因為使用“首選項”時,當您獲取任何首選項的值時,您需要指定一個值,如果之前未設置該首選項,則該值將返回。 就您而言,在此處將默認值設置為“錯誤”時, pref = sharedPrefs.getString("edit_text_pref", "error");
所以多數民眾贊成在默認值。
好吧,我堅稱“錯誤”是在讀取值時出錯而不是未設置值時使用的值!
謝謝,應該可以,我要嘗試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.