Android 显示不带碎片的对话框活动
这可能很明显,但我无法理解。 我试图通过扩展Android 显示不带碎片的对话框活动,android,android-dialogfragment,android-support-library,Android,Android Dialogfragment,Android Support Library,这可能很明显,但我无法理解。 我试图通过扩展对话框片段来使用。现在,问题是,我不知道如何调用它。文件规定: DialogFragment newFragment = new FireMissilesDialogFragment(); newFragment.show(getSupportFragmentManager(), "missiles"); 但是我的活动不扩展FragmentActivity(并且由于我的应用程序的设计,它无法扩展它),因此无法调用getSupportFragmentM
对话框片段
来使用。现在,问题是,我不知道如何调用它。文件规定:
DialogFragment newFragment = new FireMissilesDialogFragment();
newFragment.show(getSupportFragmentManager(), "missiles");
但是我的活动不扩展FragmentActivity(并且由于我的应用程序的设计,它无法扩展它),因此无法调用getSupportFragmentManager()
有解决办法吗?
我想跳过不推荐的创建对话框的方法。答案是否定的
(及其变体)是支持FragmentManager和Fragments的
您可能相信的常见解决方案“由于我的应用程序的设计,它无法扩展”
- 如果您使用的是ListActivity,只需在布局中放置一个列表
- 如果您正在使用MapActivity,请切换到新的MapAPI
- 如果您使用的是不推荐使用的TabActivity,那么应该使用片段
例如,您可以创建一个扩展DialogFragment的类,并按如下方式调用它:
_dialogFiltre = FragmentDialog.newInstance(R.string.tle_dialog_filter, this);
_dialogFiltre.setValidDialogListener(this);
_dialogFiltre.setCancelable(false);
_dialogFiltre.show(getSupportFragmentManager(), null);
新实例的方法是:
public static DialogFilter newInstance(int title, Context context) {
FragmentDialog dialog = new FragmentDialog();
Bundle args = new Bundle();
args.putInt("title", title);
dialog.setArguments(args);
dialog._context = context;
return dialog;
}
如果你不是在一个支离破碎的活动中,我看不到任何解决方案。为什么应用程序设计不允许您使用FragmentActivity?您可以直接调用getSupportFragmentManager()代码>在FragmentActivity
上,但不在Fragment
本身上。因此调用getSupportFragmentManager()
您可以做的是首先获取FragmentActivity
,然后调用getSupportFragmentManager()代码>。因此,当您获得碎片活动
时,您可以调用此函数,如下所示:
getActivity().getSupportFragmentManager();
此处getActivity()
返回与片段关联的FragmentActivity
您所做的是
1.首先,您已经创建了自定义的DialogFragment
类的实例。
2.您正在显示该对话框
既然您已经创建了自定义对话框fragment
的实例,为什么不使用它来检索对fragment manager的支持呢。因此,您可以做的是:
DialogFragment newFragment = new FireMissilesDialogFragment();
newFragment.show(newFragment.getActivity().getSupportFragmentManager(), "missiles");
这将使您获得与newFragment
关联的FragmentActivity
,并在FragmentActivity
上调用getSupportFragmentManager()代码>
不幸的是,我没有测试它,但这可能会工作。试试看,让我们知道。如果你的应用程序是为API级别>=11设计的,你可以使用本机片段(使用getFragmentManager()
)。否则你没有任何选择。嗨@Maggie下载支持库我正在使用支持库,因为我需要支持旧版本。然后你需要扩展FragmentActivity或使用Dialog而不是DialogFragment抱歉这个愚蠢的问题,只是为了确认你是在扩展DialogFragment还是其他类?同样,在这个类中,您希望获得FragmentManager的支持,对吗?不,它不起作用。我认为这样的事情可能会起作用,这与所有的逻辑都是背道而驰的。正如我所说,我的活动不扩展FragmentActivity,因此getSupportFragmentManager返回null。很抱歉,我不得不消除进一步的误导,因为我有一个库项目,我的项目中的每个活动都扩展了库项目中的基本活动。而且,由于该库项目在我公司的20个其他应用程序中使用,因此在不破坏其他应用程序的情况下对其进行更改并不容易。关于这个设计问题,我已经考虑了很多,但是还没有找到一个足够好的解决方案。哦,我明白了。没有简单的解决方案:/所以您不能仅为这种情况创建BaseFragmentActivity?(除了BaseActivity)嗨,玛姬,我知道你已经接受了我的答案,但只是关于你在这个图书馆里说的话的额外说明。公司真的应该考虑升级这个库,因为如果不扩展FragmentActivity,将无法提供越来越多的功能。例如,地图V2、加载器、对话框、平板电脑等@Budius我完全同意你的观点,但不幸的是,让你所说的一切都是正确的不是我的决定,尽管这不能解决我的问题,但我会接受你的回答。