【发布时间】:2014-08-15 17:30:24
【问题描述】:
我已根据PreferenceFragment 为我的应用创建了一个设置菜单,并希望无需打开设置菜单即可从应用的其他位置访问设置对话框。
我的设置菜单有这个:
当我从主活动中单击此菜单项时,我想显示相同的对话框:
主要的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)
这会因listPref 上的NullPointerException 而崩溃,这表明PreferenceFragment 未正确初始化。
有什么方法可以达到这个效果,还是我必须将功能写成一个 AlertDialog 并手动处理 Preference 的变化?
【问题讨论】:
标签: android android-preferences preferencefragment