2010-05-20 100 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