显示没有FragmentActivty的对话框

时间:2013-09-27 08:28:28

标签: android android-dialogfragment android-support-library

这可能相当明显,但我无法得到它。 我试图通过扩展DialogFragment来使用suggested way of creating dialogs。现在,问题是,我不知道如何调用它。文档说明:

DialogFragment newFragment = new FireMissilesDialogFragment();
newFragment.show(getSupportFragmentManager(), "missiles");

但是我的Activity没有扩展FragmentActivity(并且由于我的应用程序的设计,它无法扩展它),因此无法调用getSupportFragmentManager()

对此有何解决方法? 我想跳过创建对话框的弃用方法。

3 个答案:

答案 0 :(得分:2)

答案是否定的。

FragmentActivity(以及它的变体)是支持FragmentManager和Fragments的那些。

您可能会相信的常见解决方案“并且由于我的应用程序的设计,它无法扩展它”

  • 如果您正在使用ListActivity,只需在布局中放置一个列表。
  • 如果您使用的是MapActivity,请切换到新的地图API。
  • 如果您使用的是TabActivity,不推荐使用,则应使用Fragments。

答案 1 :(得分:0)

例如,您可以创建一个扩展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中,我看不到任何解决方案。为什么您的应用程序设计不允许您使用FragmentActivity?

答案 2 :(得分:-1)

您可以直接在getSupportFragmentManager();上调用FragmentActivity,但不能在Fragment本身调用getSupportFragmentManager();。因此,要调用FragmentActivity您可以执行的操作首先获得getSupportFragmentManager();并通过该调用FragmentActivity。因此,当您获得getActivity().getSupportFragmentManager(); 时,您可以将此函数称为:

getActivity()

此处FragmentActivity返回与您Fragment相关联的DialogFragment

你做的是什么 1.首先,您已创建自定义DialogFragment类的实例 2.你正在显示那个对话框。

现在,您已经创建了自定义DialogFragment newFragment = new FireMissilesDialogFragment(); newFragment.show(newFragment.getActivity().getSupportFragmentManager(), "missiles"); 的实例,为什么不使用它来检索片段管理器的支持。所以你能做的是:

FragmentActivity

这样做会让newFragmentFragmentActivity以及您getSupportFragmentManager(); {{1}}的{​​{1}}相关联。

不幸的是我没有测试过,但这可能有用。试一试,告诉我们。