2010-05-20 72 views
50

我的問題是當我啓動應用程序並且用戶沒有打開我的PreferenceActivity,因此當我檢索它們時,沒有在我的preference.xml文件中定義任何默認值。在主Activity中初始化來自XML的首選項

preference.xml文件:

從我的主要活性( onCreate方法)
<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="applicationPreference" android:title="@string/config" 
    > 
    <ListPreference 
      android:key="pref1" 
      android:defaultValue="default" 
      android:title="Title" 
      android:summary="Summary" 
      android:entries="@array/entry_names" 
      android:entryValues="@array/entry_values" 
      android:dialogTitle="@string/dialog_title" 
    />     
</PreferenceScreen> 

段:

SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);   
    String pref1 = appPreferences.getString("pref1", null); 

在結果我結束了一個null值。

回答

105

您的主ActivityonCreate()只需致電the PreferenceManager.setDefaultValues() method

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

這將讀取您的preference.xml文件並設置在那裏定義的默認值。將readAgain參數設置爲false意味着如果過去從未調用過此方法,則此參數將僅設置默認值,因此每次創建Activity時都不必擔心覆蓋用戶的設置。

+4

但是任何人都有這個perference.xml的示例或模板以供參考? – 2011-04-06 06:26:28

+8

你救了我的一天!在無線網絡的機場中,晚上3點鐘在空值處尋找3小時。謝謝! – Cimm 2011-05-27 02:56:04

+1

@Dave Webb這不適用於字符串首選項。 – Anderson 2012-11-29 15:19:41

8

您撥打getString()的電話號碼有null作爲第二個參數。將其更改爲所需的默認值。

+6

這是一個非常優雅的解決方案。 +1。但是,要實現OP所需的內容,PreferenceManager.setDefaultValues()是解決方案。 – ef2011 2011-05-09 01:58:07

14

我會簡要介紹一下。 :)

的strings.xml(其實我有偏好的prefs.xml獨家):

<string name="pref_mypref_key">mypref</string> 
<string name="pref_mypref_default">blah</string> 

的preferences.xml

android:key="@string/pref_mypref_key" 
android:defaultValue="@string/pref_mypref_default" 

MyActivity.java

String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default)); 
+0

謝謝,這實際上是回答我的另一個問題,關於在哪裏存儲首選項的關鍵:)如果我能夠結合它與這個問題的最佳答案,它將是偉大的! – pixel 2010-05-20 19:04:15

+2

顯然,在這個例子中,這行會出現在'myprefVal'賦值之前的'MyActivity.java'中:'SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);' – hotshot309 2011-12-30 17:01:57

+3

這有效,但是這真的有必要嗎? – JohnyTex 2014-10-16 18:51:26