繁体   English   中英

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

[英]Android: how to open a ListPreference dialog from outside PreferenceActivity/PreferenceFragment?

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

我的设置菜单包含:

设置菜单

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

主要活动

Activity有一个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类之外编写这个功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM