嗨,Android 开发人员,
我尝试连续有两个 DialogFragment,所以当第一个被取消时,会弹出第二个。
这是我到目前为止所拥有的:
在我的活动中,我调用以下方法:
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