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我完全同意你的观点,但不幸的是,让你所说的一切都是正确的不是我的决定,尽管这不能解决我的问题,但我会接受你的回答。