gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:56 25 4
gpt4 key购买 nike

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

我的设置菜单有这个:

settings menu

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

main activity

主要的 Activity 有一个 ListFragment,它是所有 UI 处理代码所在的地方。 PreferenceActivityPreferenceFragment 都不是。

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

我认为将 PreferenceFragment 添加到主 Activity 中的 FragmentManager 会正确实例化它,但它似乎不起作用。

来自“排序”选项的菜单处理程序代码:

    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 类之外自己编写此功能。

Preference, PreferenceActivity, and PreferenceFragment were all designed to work together to provide a consistent UIX for android apps. As such it's recommended to use them together as they were intended.

You can't directly replicate the UI of PreferenceActivity or PreferenceFragment outside of those two classes in a regular activity because the UI is built from Preference objects, not View objects like regular Activities. So if you want that particular UI you'd have to try and duplicate it using custom Views.

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

关于Android:如何从 PreferenceActivity/PreferenceFragment 外部打开 ListPreference 对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24403807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com