访问在另一个Activity下的PreferenceFragment中编辑的SharedPreferences

时间:2015-04-28 15:54:41

标签: android android-fragments sharedpreferences

我有一个主要活动有多个碎片。从菜单中,用户可以转到包含PreferenceFragment的新活动:

偏好活动和片段:

public class SettingsActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.options_screen);
    }

    /**
     * This fragment shows the preferences for the first header.
     */
    public static class Prefs1Fragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.pref_options);
        }
    }
}

偏好设置xml文件:

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

        <ListPreference
            android:key="pref_key_display_units"
            android:title="@string/pref_title_units"
            android:summary="@string/pref_summary_units"
            android:entries="@array/entries_list_units"
            android:entryValues="@array/entryvalues_list_units"
            android:dialogTitle="@string/pref_dialog_title_list_units"
            android:defaultValue="0"/>

    </PreferenceCategory>
</PreferenceScreen>

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/settings_content"
    android:paddingTop="?android:attr/actionBarSize">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.cs.biodyapp.usl.activity.SettingsActivity$Prefs1Fragment"
        android:id="@+id/fragment" />
</LinearLayout>

初始化选项后,我尝试从原始Activity访问此首选项,但我总是在SharedPreferences对象中获得一个空Map。

我尝试了很多方法,假设您可以通过不同的活动或直接从文件中访问首选项,但没有机会:

//SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());
        SharedPreferences sharedPref = getActivity().getApplication().getSharedPreferences("pref_options", Context.MODE_PRIVATE);
        int units = sharedPref.getInt("pref_key_display_units", 0);

1 个答案:

答案 0 :(得分:0)

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());

是否使用正确的行(获取应用程序上下文而不是基本上下文)。

我还在ListPreference中检测到使用PreferenceFragment整数数组的问题。最后,我不得不使用字符串数组和sharedPrefs.getString()然后将其转换为整数。