6

我已经为我的应用程序创建了一个基于 的设置菜单PreferenceFragment,并且希望从应用程序的其他位置访问设置对话框,而无需打开设置菜单。

我的设置菜单有这个:

设置菜单

当我从主活动中单击此菜单项时,我想显示相同的对话框:

主要活动

mainActivity有一个ListFragment,它是所有 UI 处理代码所在的位置。PreferenceActivitya或都不是PreferenceFragment

我只想调用同一个PreferenceFragment对象来进入对话框,否则我必须编写自定义代码来手动处理首选项更改,我想避免这种情况。

我认为将其添加PreferenceFragmentFragmentManagermainActivity会正确实例化它,但它似乎不起作用。

从我的“排序”选项的菜单处理程序代码中:

    SettingsFragment fragment = (SettingsFragment) getFragmentManager().findFragmentByTag(SettingsActivity.FRAGMENT_TAG);

    // first run case
    if (fragment == null) {
        fragment = SettingsFragment.newInstance(getActivity());
        getFragmentManager().beginTransaction().add(fragment, SettingsActivity.FRAGMENT_TAG).commit();
    } 

    CustomListPreference listPref = (CustomListPreference) fragment.findPreference(SettingsFragment.KEY_PREF_SORTORDER);
    listPref.show(); // invokes showDialog(null)

NullPointerException这与on一起崩溃listPref,这表明PreferenceFragment未正确初始化。

有什么方法可以实现这种效果,还是我必须将功能编写为 AlertDialog 并手动处理 Preference 更改?

4

1 回答 1

1

我认为您必须在 Preference 类之外自己编写此功能。

Preference、PreferenceActivity 和 PreferenceFragment 都旨在协同工作,为 Android 应用程序提供一致的 UIX。因此,建议按照预期将它们一起使用。

您不能在常规活动中直接在这两个类之外复制 PreferenceActivity 或 PreferenceFragment 的 UI,因为 UI 是由 Preference 对象构建的,而不是像常规活动那样的 View 对象。因此,如果你想要那个特定的 UI,你必须尝试使用​​自定义视图来复制它。

https://discussions.udacity.com/t/way-to-do-listpreference-outside-of-settings-menu/45473

于 2016-01-28T04:47:08.150 回答