在主Activity中初始化XML中的首选项

pix*_*xel 50 xml android android-preferences

我的问题是,当我启动应用程序并且用户没有打开我的PreferenceActivity时候,当我检索它们时,不会获得我的preference.xml文件中定义的任何默认值.

preference.xml文件:

<?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>
Run Code Online (Sandbox Code Playgroud)

我的主要活动(onCreate方法)的片段:

    SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);        
    String pref1 = appPreferences.getString("pref1", null);
Run Code Online (Sandbox Code Playgroud)

结果我得到了一个null值.

Dav*_*ebb 107

onCreate()你的主要的Activity只是调用PreferenceManager.setDefaultValues()方法.

PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Run Code Online (Sandbox Code Playgroud)

这将读取您的preference.xml文件并设置其中定义的默认值.将readAgain参数设置为false意味着只有在过去从未调用此方法时才会设置默认值,因此您无需担心每次Activity创建时都会覆盖用户的设置.

  • 你救了我的一天!一直在寻找3个小时的空值,在晚上3点在一个机场机智的网络连接wifi.谢谢! (8认同)
  • 但是,任何人都有此perference.xml的示例或模板供参考? (4认同)
  • 将 `readAgain` 设置为 true 与覆盖用户的设置无关。来自 Javadoc:_注意:这不会将首选项重置为其默认值。_ (2认同)

yan*_*nko 14

我会简短的.:)

strings.xml(实际上我只有prefs.xml用于首选项):

<string name="pref_mypref_key">mypref</string>
<string name="pref_mypref_default">blah</string>
Run Code Online (Sandbox Code Playgroud)

preferences.xml:

android:key="@string/pref_mypref_key"
android:defaultValue="@string/pref_mypref_default"
Run Code Online (Sandbox Code Playgroud)

MyActivity.java:

String myprefVal = prefs.getString(getString(R.string.pref_mypref_key), getString(R.string.pref_mypref_default));
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但这真的有必要吗? (4认同)
  • 显然,在这个例子中,在分配`myprefVal`之前,这一行将出现在`MyActivity.java`中:`SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);` (2认同)

Com*_*are 8

您的呼叫getString()null第二个参数.将其更改为您想要的默认值.

  • 这是一个非常优雅的解决方案.+1.但是,要实现OP所需的,PreferenceManager.setDefaultValues()是解决方案. (6认同)