2012-09-09 70 views
1

Android指南推薦在XML文件中定義首選項,然後可以從PreferenceActivity/PreferenceFragment等中加載這些首選項以供用戶查看和編輯。但在真實情況下,用戶首先與其他活動進行交互,然後(可能)使用首選項UI。初始化首選項

如果首發活動需要這些偏好,該怎麼辦?他們還沒有加載,因爲偏好資源尚未膨脹。有沒有辦法預先訪問XML文件中的首選項?

回答

3

是。當您首次請求首選項時,您可以爲其提供默認值。例如。如果要加載一個int類型的偏好,那麼你可以通過以下方式從活動中做到這一點:

SharedPreferences defaultSettings = PreferenceManager.getDefaultSharedPreferences(this); 
int preferenceValue = defaultSettings.getInt("PreferenceName", 7); 

這將加載preferenceValue爲7(沒有這個喜好曾經被初始化還)。這假定在你的XML首選項文件中,你有一個首選項「PreferenceName」。如果你打算修改這一偏好在之前的偏好活動已經跑活動,請確保您有SharedPreferenceEditor提交更改:

// ... change to preferenceValue occurs prior to this code 
SharedPreferences.Editor defaultEditor = defaultSettings.edit(); 
defaultEditor.putInt("PreferenceName", preferenceValue); 
defaultEditor.commit(); 

我們可能要硬編碼的事情,以避免「PreferenceName」雖然,而是將其用作strings.xml文件中的字符串。這種方式可以在首選代碼尚未保存時從初始代碼中抓取,也可以從首選XML文件中抓取。這意味着我們上面的代碼替換字符串「PreferenceName」的東西,如下列:

getResources().getString(R.string.pref_name) 

而在你偏好的XML文件,你可以將引用下面的道路上的關鍵:

android:key="@string/pref_name" 
android:defaultValue="7" 

這應該涵蓋「預加載」首選項,並嘗試將大部分應用程序設置保留在一個地方。就初始活動發生之前XML偏好是否被創建/加載而言,確實可能存在重疊,但我還沒有測試過。

編輯:原來的,而不是使用上面的代碼時,可以直接通過以下方法加載XML文件(與它的缺省優先級):

PreferenceManager.setDefaultValues(this, R.xml.preference, false); 

有關此方法的更多的信息可以是在PreferenceManager的文檔中找到:http://developer.android.com/reference/android/preference/PreferenceManager.html

+0

謝謝,我認爲應該在Android中提供一個預加載首選項的工具。 。 **編輯**'PreferenceManager.setDefaultValues()'這就是我一直在尋找的東西。再次感謝。 –

+0

沒問題。我同意,這聽起來像是一個在清單本身擁有選項的好主意......我不知道它是否存在,但是如果它真的存在,我想知道如果列出多個XML文件會發生什麼與默認值相沖突...無論如何,我很高興有幫助。 –