在用户打开设置活动之前使用getDefaultSharedPreferences

时间:2014-06-09 07:16:10

标签: android sharedpreferences

我的Android应用中有一个Settings Activity。这些设置的默认值为res/xml/preferences.xml。我遇到的问题是,在用户实际进入设置页面之前,默认的首选项不会保存,我无法检索存储在XML文件中的默认值。

代码:

RES / XML /的preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <EditTextPreference
        android:defaultValue="xml default value"
        android:title="foo"
        android:summary="bar"
        android:key="mykey" />

</PreferenceScreen>

SettingsActivity.java

package bh.gov.cio.gdt.app;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;

public class SettingsActivity extends PreferenceActivity {
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new MyPreferenceFragment()).commit();
    }

    public static class MyPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}

在另一项活动中:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
String myvalue = settings.getString("mykey", "code default value")
Log.d(LOG_TAG, myvalue);

首次安装应用程序时,对settings.getString的调用会返回"code default value"。但是,一旦用户至少打开一次“设置”活动,它就会返回xml default value

我想避免在第一次运行程序时强制用户转到设置页面。我还想避免在XML文件和代码中两次使用默认值。

1 个答案:

答案 0 :(得分:1)

我相信您需要调用您的活动OnCreate()

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