像DialogFragment-Chain这样的向导

时间:2011-11-03 22:47:34

标签: android android-fragments orientation-changes android-dialogfragment

嗨其他Android开发者,

我尝试连续两个DialogFragments,所以当第一个被取消时会弹出第二个。

这是我到目前为止所做的:

在我的活动中,我调用以下方法:

void showFirstDialog() {
        // Pass the context to do a callback
        DialogFragment newFragment = ChangeDialogFragment.newInstance(mContext);
        newFragment.show(getSupportFragmentManager(), "myFirstDialogTag");
    }

在我的DialogFragment中,我有以下代码来检测它是否会被取消:

@Override
    public void onCancel(DialogInterface dialog) {
            // Use Context to do a callback and inform the Activity that
            // Fragment is cancelled
        ((Activity) mContext).firstDialogCanceled();
        super.onCancel(dialog);
    }

回到我的活动中,我通过启动第二个对话框对该事件作出反应:

void firstDialogCanceled {
        DialogFragment newFragment = InformationDialogFragment.newInstance();
        newFragment.show(getSupportFragmentManager(), "mySecondDialogTag");
    }

只要我在第一个对话框中没有方向更改,这就完美无缺。当我有一个时,我收到以下错误:

  

java.lang.IllegalStateException:之后无法执行此操作   的onSaveInstanceState

在“newFragment.show(getSupportFragmentManager(),”mySecondDialogTag“);”

这一行引发了这种例外情况。

我认为如何解决这个问题就是手动关闭第一个对话框。我试过以下:

DialogFragment firstFragment = (DialogFragment) getSupportManager().findFragmentByTag("myFirstDialogTag");
firstFragment.dismiss();

再次没有方向改变,每个人都工作正常。当第一个对话框在屏幕上时我有一个方向更改时,我在第一行“firstFragment.dismiss()”上得到一个NullPointerException。

为什么会这样?为什么FragmentManager在方向改变后忘记了我的DialogFragment,为什么我不能只显示第二个。 Androidreferences说:

  

你应该使用show(FragmentManager,String)或   show(FragmentTransaction,String)添加DialogFragment的实例   到你的UI,因为它们跟踪DialogFragment应该如何删除   当对话被解雇时本身。

我使用show,但它仍然无法正常工作。

非常感谢任何提示!

干杯Ali3n

1 个答案:

答案 0 :(得分:2)

您正在对话框片段中使用活动的旧实例。我猜您在mContext方法中将当前活动作为newInstance传递。在更改配置或键盘等配置后,此上下文对象将变为无效,并且不再附加到任何窗口。

您可以使用getActivity() FragmentDialog方法获取其所在的当前活动。