我有一个主要活动有多个碎片。从菜单中,用户可以转到包含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);
答案 0 :(得分:0)
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext());
是否使用正确的行(获取应用程序上下文而不是基本上下文)。
我还在ListPreference
中检测到使用PreferenceFragment
整数数组的问题。最后,我不得不使用字符串数组和sharedPrefs.getString()
然后将其转换为整数。