0

这可能很明显,但我无法理解。我正在尝试通过扩展来使用建议的方式来创建对话框DialogFragment。现在,问题是,我不知道如何调用它。文档指出:

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

但是我的 Activity 没有扩展 FragmentActivity (并且由于我的应用程序的设计,它不能扩展它),所以getSupportFragmentManager()不能被调用。

有什么解决方法吗?我想跳过不推荐使用的创建对话框的方式。

4

3 回答 3

2

答案是不。

FragmentActivity(及其变体)是支持 FragmentManager 和 Fragments 的。

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

  • 如果您使用 ListActivity,只需在布局中放置一个列表。
  • 如果您使用的是 MapActivity,请切换到新的地图 API。
  • 如果您使用的是已弃用的 TabActivity,则应使用 Fragments。
于 2013-09-27T08:49:13.507 回答
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 ?

于 2013-09-27T08:57:44.490 回答
-1

好吧,您可以直接调用getSupportFragmentManager();onFragmentActivity但不能直接调用Fragment它本身。所以调用getSupportFragmentManager();你能做的就是首先 get FragmentActivityand on that call getSupportFragmentManager();。因此,当您得到FragmentActivity时,您可以像这样调用此函数:

getActivity().getSupportFragmentManager();

这里getActivity()返回FragmentActivity与您的Fragment.

您所做的是
1. 首先您创建了自定义DialogFragment类的实例。
2.您正在显示该对话框。

现在您已经创建了一个自定义实例,DialogFragment为什么不使用它来检索对片段管理器的支持。所以你可以做的是:

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

这将做的是你正在FragmentActivity与你newFragment正在FragmentActivity调用的相关联getSupportFragmentManager();

不幸的是,我还没有测试过,但这可能会奏效。试试看,让我们知道。

于 2013-09-27T09:14:19.037 回答