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

时间:2014-06-25 08:32:57

标签: android android-preferences preferencefragment

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

我的设置菜单包含:

settings menu

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

main activity

Activity有一个ListFragment,这是所有UI处理代码所在的位置。既不是PreferenceActivity也不是PreferenceFragment

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

我认为将PreferenceFragment添加到主FragmentManager中的Activity会正确地实例化它,但它似乎无法正常工作。

从我的菜单处理程序代码"排序"选项:

    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上的listPref崩溃,显示PreferenceFragment未正确初始化。

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

1 个答案:

答案 0 :(得分:1)

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

  

Preference,PreferenceActivity和PreferenceFragment都是   旨在共同为Android提供一致的UIX   应用。因此,建议他们一起使用它们   意图。

     

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

     

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