【问题标题】:Android: how to open a ListPreference dialog from outside PreferenceActivity/PreferenceFragment?Android:如何从 PreferenceActivity/PreferenceFragment 外部打开 ListPreference 对话框?
【发布时间】:2014-08-15 17:30:24
【问题描述】:

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

我的设置菜单有这个:

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

主要的Activity 有一个ListFragment,这是所有UI 处理代码所在的位置。 PreferenceActivityPreferenceFragment 都不是。

我只想调用相同的 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)

这会因listPref 上的NullPointerException 而崩溃,这表明PreferenceFragment 未正确初始化。

有什么方法可以达到这个效果,还是我必须将功能写成一个 AlertDialog 并手动处理 Preference 的变化?

【问题讨论】:

    标签: android android-preferences preferencefragment


    【解决方案1】:

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

    Preference、PreferenceActivity 和 PreferenceFragment 都是 旨在协同工作,为 android 提供一致的 UIX 应用。因此,建议将它们按原样一起使用 有意的。

    您不能直接复制 PreferenceActivity 的 UI 或 常规活动中这两个类之外的 PreferenceFragment 因为 UI 是从 Preference 对象构建的,而不是 View 对象 定期活动。所以如果你想要那个特定的用户界面,你必须 尝试使用自定义视图复制它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 2016-07-09
      • 2011-08-03
      • 1970-01-01
      相关资源
      最近更新 更多