弹出堆栈两次导致错误
Popping back stack twice causes an error
我有片段已按以下顺序添加到返回堆栈中:
- 目标片段(可以是两个片段之一)
- 信息片段
- 成功片段
SuccessFragment 有一个带有 onClick() 的按钮,如下所示:
@Override
public void onClick(View v) {
activity.getFragmentManager().popBackStack();
activity.getFragmentManager().popBackStack();
}
但是,执行两次 popBackStack()
会导致错误,指出 InfoFragment 未附加到 activity。我怎样才能在没有这个错误的情况下正确地弹出返回堆栈两次?
编辑:添加了有关如何将片段添加到后台堆栈的代码。
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.main_fragment, new InfoFragment());
transaction.addToBackStack(getResources().getString(R.string.tag_info_fragment));
transaction.commit();
因此,事实证明,使用 popBackStack 两次不是问题所在。问题是我没有考虑到 InfoFragment 的 onStart 方法中的异步调用。异步调用在 onStart 方法中,当调用 popBackStack 时,该方法也被调用。在第二个 popBackStack 移除 InfoFragment 后,此异步调用完成。此异步调用是一个 URI 加载图像,并且由于片段不再附加到 activity,尝试设置 ImageView 的图像失败。
我有片段已按以下顺序添加到返回堆栈中:
- 目标片段(可以是两个片段之一)
- 信息片段
- 成功片段
SuccessFragment 有一个带有 onClick() 的按钮,如下所示:
@Override
public void onClick(View v) {
activity.getFragmentManager().popBackStack();
activity.getFragmentManager().popBackStack();
}
但是,执行两次 popBackStack()
会导致错误,指出 InfoFragment 未附加到 activity。我怎样才能在没有这个错误的情况下正确地弹出返回堆栈两次?
编辑:添加了有关如何将片段添加到后台堆栈的代码。
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.main_fragment, new InfoFragment());
transaction.addToBackStack(getResources().getString(R.string.tag_info_fragment));
transaction.commit();
因此,事实证明,使用 popBackStack 两次不是问题所在。问题是我没有考虑到 InfoFragment 的 onStart 方法中的异步调用。异步调用在 onStart 方法中,当调用 popBackStack 时,该方法也被调用。在第二个 popBackStack 移除 InfoFragment 后,此异步调用完成。此异步调用是一个 URI 加载图像,并且由于片段不再附加到 activity,尝试设置 ImageView 的图像失败。