【问题标题】:Implementing PreferenceFragment?实现 PreferenceFragment?
【发布时间】:2014-08-17 23:21:11
【问题描述】:

我一直在努力在我的应用中实现 PreferenceFragment。我的目标是让首选项视图替换我的 main_activity 片段容器,这样我就可以保留相同的导航抽屉、操作栏等。

我已经创建了一个 Preference Fragment 类,如下所示:

public class MadlibsSettings extends PreferenceFragment {

android.support.v7.app.ActionBar actionBar;
CheckBoxPreference themeSwitch;
ListPreference fontSize;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = super.onCreateView(inflater, container, savedInstanceState);
    view.setBackgroundColor(getResources().getColor(android.R.color.white));

    actionBar = (android.support.v7.app.ActionBar) ((MainActivity)getActivity()).getSupportActionBar();
    actionBar.setTitle("Settings");

    addPreferencesFromResource(R.layout.madlibs_settings);

    //fontSize = (ListPreference) findPreference("list");

    return view;
}
}

我在 R.layout.madlibs_settings 中的偏好是:

<PreferenceCategory android:title="PreferenceCategory A" >
    <CheckBoxPreference
        android:id="@+id/checkbox1"
        android:defaultValue="false"
        android:key="checkbox1"
        android:summary="Switches App Layout to Dark Theme"
        android:title="Darker Theme" />
</PreferenceCategory>
<PreferenceCategory android:title="PreferenceCategory B" >
    <ListPreference
        android:id="@+id/ListPreference"
        android:defaultValue="8"
        android:entries="@array/list"
        android:entryValues="@array/LValues"
        android:key="list"
        android:summary="Choose Font Size"
        android:title="Font Size" />
</PreferenceCategory>

</PreferenceScreen>

我不太确定在我的主要活动中要做什么来增加偏好,然后使用 haredpreferences 从我的偏好中访问数据。任何帮助都会很棒,我绝对是一个有碎片的菜鸟。

【问题讨论】:

    标签: android android-fragments sharedpreferences preferences preferencefragment


    【解决方案1】:

    因为preferenceFragment 是一个实际的Fragment,您可以使用FragmentTransation 简单地交换它,就像您在Nav 抽屉中的其他Fragment 一样。在任何 onClick 事件或其他情况下,请使用以下内容转到您的 PreferenceFragment:

    getFragmentManager().beginTransaction()
                .replace(R.id.fragmentContainer, new MadlibSettings())
                .commit();
    

    来源:http://developer.android.com/guide/topics/ui/settings.html#Fragment

    然后,为了从任何地方访问您的首选项,以下代码应该能够帮助您入门。

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getContext());
    String val1 = settings.getString("KEY", "default_value");
    settings.putString("key", "new_value");
    

    如果您决定在设置文件之外创建自己的首选项文件,那么您将使用:

    SharedPreferences settings = getContext().getSharedPreferences("pref_file_name", 0);
    String val1 = settings.getString("KEY", "default_value");
    settings.putString("KEY", "new_value");
    

    【讨论】:

      【解决方案2】:

      已发现上述方法会遇到诸如具有透明首选项窗口之类的问题。我可以避免这些问题的唯一方法是使用preferenceActivity 类: How do you create Preference Activity and Preference Fragment on Android? 来自 WannaGetHigh

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多