Android指南推薦在XML文件中定義首選項,然後可以從PreferenceActivity
/PreferenceFragment
等中加載這些首選項以供用戶查看和編輯。但在真實情況下,用戶首先與其他活動進行交互,然後(可能)使用首選項UI。初始化首選項
如果首發活動需要這些偏好,該怎麼辦?他們還沒有加載,因爲偏好資源尚未膨脹。有沒有辦法預先訪問XML文件中的首選項?
Android指南推薦在XML文件中定義首選項,然後可以從PreferenceActivity
/PreferenceFragment
等中加載這些首選項以供用戶查看和編輯。但在真實情況下,用戶首先與其他活動進行交互,然後(可能)使用首選項UI。初始化首選項
如果首發活動需要這些偏好,該怎麼辦?他們還沒有加載,因爲偏好資源尚未膨脹。有沒有辦法預先訪問XML文件中的首選項?
是。當您首次請求首選項時,您可以爲其提供默認值。例如。如果要加載一個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
如果你看一下SharedPreference API,你會看到這個
的getString(String鍵,字符串利用DefValue)
所以,實際上你可以在事實上定義,如果它不是已經存在的默認值。
來源:http://developer.android.com/reference/android/content/SharedPreferences.html
您也可以使用
的Android XML預定義默認值:默認值= 「東西」
謝謝,我認爲應該在Android中提供一個預加載首選項的工具。 。 **編輯**'PreferenceManager.setDefaultValues()'這就是我一直在尋找的東西。再次感謝。 –
沒問題。我同意,這聽起來像是一個在清單本身擁有選項的好主意......我不知道它是否存在,但是如果它真的存在,我想知道如果列出多個XML文件會發生什麼與默認值相沖突...無論如何,我很高興有幫助。 –