activity has been destroyed ,使用 fragment时
2016-08-06 14:55
190 查看
今天 程序中,忽然遇到了这个bug,现象,viewpager里的fragment 嵌套fragment,有使用transation.commitAllowingStateLoss方法,当退出 这个activity,再进入,在fragment里面 切换 fragment时,出现 activity has been destroyed 这个bug,下面贴出 部分代码:
fm = getActivity().getSupportFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); transaction.add(R.id.frame_layout, wksFragment, "wks"); transaction.add(R.id.frame_layout, jxzFragment, "jxz"); transaction.add(R.id.frame_layout, ywcFragment, "ywc"); transaction.commit(); fm.beginTransaction().hide(wksFragment).hide(ywcFragment).show(jxzFragment).commitAllowingStateLoss();
//未开赛 weiRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { change(weiRl, weiTv); //weiTv.setCompoundDrawables(); fm.beginTransaction().hide(jxzFragment).hide(ywcFragment).show(wksFragment).commitAllowingStateLoss(); } }); //进行中 onRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { change(onRl, onTv); fm.beginTransaction().hide(wksFragment).hide(ywcFragment).show(jxzFragment).commitAllowingStateLoss(); } }); //已完场 wanRl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { change(wanRl, wanTv); fm.beginTransaction().hide(jxzFragment).hide(wksFragment).show(ywcFragment).commitAllowingStateLoss(); } });
最后 解决办法,
发现,我在要调用commitAllowingStateLoss方法的fragment 上, 在onViewCreated方法里,加入了非空判断
如下
@Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) {if (fm== null) {wksFragment = new QuWksFragment();jxzFragment = new QuJxzFragment();ywcFragment = new QuYwcFragment();fm = getActivity().getSupportFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); transaction.add(R.id.frame_layout, wksFragment, "wks"); transaction.add(R.id.frame_layout, jxzFragment, "jxz"); transaction.add(R.id.frame_layout, ywcFragment, "ywc"); transaction.commit(); fm.beginTransaction().hide(wksFragment).hide(ywcFragment).show(jxzFragment).commitAllowingStateLoss();initListerner();}}
然后 把 非空 判断去掉,问题就解决了。
相关文章推荐
- FragmentManag.beginTransaction().add(Res,fragment).commit 报错 Activity has been destroyed
- Java.lang.IllegalStateException Activity has been destroyed(Fragment+ViewPage)
- 解决Fragment相关问题,java-lang-illegalstateexception-activity-has-been-destroyed
- 解决Fragment相关问题,java-lang-illegalstateexception-activity-has-been-destroyed
- 解决Fragment相关问题,java-lang-illegalstateexception-activity-has-been-destroyed
- Fragment嵌套Fragment多次切换两次会出现Activity has been destroyed错误的解决办法
- 错误:Activity has been destroyed
- Activity has been destroyed
- Java.lang.IllegalStateException Activity has been destroyed
- Android Exception 14(Activity has been destroyed)
- Java.lang.IllegalStateException Activity has been destroyed
- Java.lang.IllegalStateException Activity has been destroyed
- java.lang.IllegalStateException: Activity has been destroyed
- Android:Java.lang.IllegalStateException Activity has been destroyed
- Java.lang.IllegalStateException Activity has been destroyed
- 嵌套Fragment的使用及遇到The specified child already has a parent. You must call removeView()问题的解决
- Android开发:使用Fragment改造TabActivity
- ActivityManager: Warning: Activity not started, its current task has been brought to the front
- Android异常总结---ActivityManager: Warning: Activity not started,its current task has been brought to th
- 使用eclipse测试osgi遇到的问题--“Workbench has not been created yet”