6

我使用PreferenceManager.setDefaultValues(context,R.xml.preferences,false)在我的應用程序中設置首選項的默認值,我注意到如果我添加一個新的首選項,那麼我的PreferenceFragment不會顯示它的默認值,即使是在的preferences.xml ..PreferenceManager.setDefaultValues readAgain參數和新的首選項

設置這是由於我指定readAgain虛假的事實?

我知道我可以簡單地試試看,但我只是想確保readAgain是爲了這個目的,即重新讀取默認值,而不是重新設置用戶設置,而是設置新屬性的默認值。如果這正是readAgain標誌的用途,那麼您是否可以給我一個理由,因爲它不會重置用戶首選項,因此不會始終將readAgain設置爲true?

回答

4

readagain標誌設置爲true將確保所有未設置的默認值再次被設置。這是總結。

設置readagain會導致額外的開銷,因爲基本上這意味着代碼將會再次遍歷整個SharedPreference以檢查它們。在readAgain爲false時,它所做的只是檢查是否存在用作設置默認值的標記的文件(has_set_default_values.xml)。

無論如何,它不會設置任何已經設置的值。

+0

我想過可能的開銷......我有少於10個的偏好,所以它不應該是一個問題..是否有任何其他方式的監測,如果新的偏好添加,並強制首選只重載在該事件?例如,我可以理解應用程序在更新後第一次啓動的情況嗎?也許我可以使用像* last_version_seen *這樣的優先選項,並在應用程序針對當前版本啓動時進行檢查,並使用* readAgain *設置爲true來觸發優先重新加載,對嗎? –

+1

請參閱[ChangeLog](http://code.google.com/p/android-change-log/)的代碼。該名稱解釋了該組代碼的用法。但是,除此之外,您可以通過爲此設置一個DefaultSharedPreference來實現首次運行檢查。 ;-)。 – Niranjan

+0

@GianniCostanzi讓'readagain'成爲true。如果它只是10個首選項,爲什麼還會有更多的代碼受到影響。這並不是懶惰,只是爲了達到10-20個目標而創建另一個前提是不值得的。 但是如果你喜歡我給你展示的'ChangeLog'庫,那麼在那個文件中加入一點代碼'cl.firstRun()'就在那裏。 :-)。否則,請將其保持爲真。 – Niranjan