【发布时间】:2015-12-15 07:14:45
【问题描述】:
我的应用中有这样的场景:
一个活动(A) 与多个片段在某个时候调用另一个活动(B)。
流程如下: F1 => F2 => F3 => B 或 F1 => F2 => B 其中 F(n) 表示片段。完成活动 B 后,它会将我返回到 F3 或 F2 但我的目标是显示用户 F1,所以我尝试通过事件总线发送事件并用 F1 替换任何其他片段,请注意,我正在将每个片段添加到 backstack。所以我成功了,但是如果我调用片段 F2 或 F3 应用程序有时也会崩溃我得到"IllegalStateException: Can not perform this action after onSaveInstanceState"。
所以在尝试了很多方法后,我只是这样做了:
public void onClick(View v){
//started activity B
//replaced current fragment with F1
}
这样做的最终结果是在活动 B 之前看到 F1,其他一切工作正常而没有崩溃。所以为了解决这个故障,我在活动 B 开始后 100 毫秒更换了片段。
public void onClick(View v){
//started activity B
new Handler().(new Runable(){
@Override
public void run()
{
//replaced current fragment with F1
}
},100);
}
但是我觉得这样解决这个问题的方法很丑,想问一下有没有更好的解决方案?
编辑:
我受到特殊答案的启发,所以我对州做了类似的事情。
在活动 A 中,我有两个变量。
boolean wasAnotherActivityCalled=false;
String showFragment=null;
在我的片段中,我有这个:
public void onClick(View v){
//started activity B
getActivity().wasAnotherActivityCalled=true;
getActivity().showFragment=FragmentOne.class.getSimpleName();
}
在活动 A 我有这个:
@Override
protected void onResumeFragments() {
super.onResumeFragments();
if(wasAnotherActivityCalled)
{
if(showFragment.equals(F1.class.getSimpleName()))
{ //do your logic here}
wasAnotherActivityCalled=false;
showFragment=null;
}
}
【问题讨论】:
-
在调用activity b之后......调用finish()
标签: android android-fragments android-lifecycle