Android:如何从PreferenceActivity/PreferenceFragment之外打开ListPreference对话框?

6
我已经基于PreferenceFragment创建了一个应用程序的设置菜单,并希望在不打开设置菜单的情况下从应用程序的其他位置访问设置对话框。
我的设置菜单如下图所示: settings menu 我想在主活动中点击此菜单项时显示相同的对话框: main activityActivity有一个ListFragment,所有UI处理代码都在那里。两者都不是PreferenceActivityPreferenceFragment
我只想调用相同的PreferenceFragment对象以获得对话框,否则我将不得不编写自定义代码手动处理首选项更改,我想避免这种情况。
我认为将PreferenceFragment添加到主ActivityFragmentManager中会正确实例化它,但似乎不起作用。
以下是“排序”选项的菜单处理程序代码:
    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)

listPref 上会发生 NullPointerException,这表明 PreferenceFragment 没有被正确初始化。

有没有办法实现这个效果,还是我必须将功能编写为 AlertDialog 并手动处理 Preference 更改?

1个回答

1
我认为你需要在Preference类之外自己编写这个功能。
Preference、PreferenceActivity和PreferenceFragment旨在共同提供一致的Android应用程序用户界面。因此,建议将它们一起使用,按照设计意图使用它们。
在常规活动中,您无法直接复制PreferenceActivity或PreferenceFragment的UI,因为UI是由Preference对象构建的,而不是像常规活动那样的View对象。因此,如果您想要特定的UI,则必须尝试使用自定义视图来复制它。 https://discussions.udacity.com/t/way-to-do-listpreference-outside-of-settings-menu/45473

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接