我已经为我的应用程序创建了一个基于 的设置菜单PreferenceFragment
,并且希望从应用程序的其他位置访问设置对话框,而无需打开设置菜单。
我的设置菜单有这个:
当我从主活动中单击此菜单项时,我想显示相同的对话框:
mainActivity
有一个ListFragment
,它是所有 UI 处理代码所在的位置。PreferenceActivity
a或都不是PreferenceFragment
。
我只想调用同一个PreferenceFragment
对象来进入对话框,否则我必须编写自定义代码来手动处理首选项更改,我想避免这种情况。
我认为将其添加PreferenceFragment
到FragmentManager
mainActivity
会正确实例化它,但它似乎不起作用。
从我的“排序”选项的菜单处理程序代码中:
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
这与on一起崩溃listPref
,这表明PreferenceFragment
未正确初始化。
有什么方法可以实现这种效果,还是我必须将功能编写为 AlertDialog 并手动处理 Preference 更改?