我的应用程序中有这种情况:片段事务和活动转换
一个活动(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
}
这样做的最终结果是看到F1活动B之前,一切运行良好,而不crashing.So解决这个故障我更换活动B开始后100 ms的片段。
public void onClick(View v){
//started activity B
new Handler().(new Runable(){
@Override
public void run()
{
//replaced current fragment with F1
}
},100);
}
但我觉得这是丑陋的方式来解决这个问题,我想问你是否有更好的解决方案?
编辑:
我被spcial答案,所以我做类似的事情,与各国的启发。
在活动A我有两个变量。
boolean wasAnotherActivityCalled=false;
String showFragment=null;
在我的片段我有这样的:
public void onClick(View v){
//started activity B
getActivity().wasAnotherActivityCalled=true;
getActivity().showFragment=FragmentOne.class.getSimpleName();
}
在活动AI有这样的:
@Override
protected void onResumeFragments() {
super.onResumeFragments();
if(wasAnotherActivityCalled)
{
if(showFragment.equals(F1.class.getSimpleName()))
{ //do your logic here}
wasAnotherActivityCalled=false;
showFragment=null;
}
}
在呼叫活动b之后......致电完成() –