【Android】java.lang.IllegalStateException: Recursive entry to executePendingTransactions

本文解决了Android开发中使用嵌套Fragment出现的java.lang.IllegalStateException: Recursive entry to executePendingTransactions错误。通过正确配置PageAdapter及重写onDetach方法来避免重复调用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



【Android】java.lang.IllegalStateException: Recursive entry to executePendingTransactions

 

 

正文 

错误

复制代码
 java.lang.IllegalStateException: Recursive entry to executePendingTransactions
     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
     at android.support.v4.view.ViewPager.populate(ViewPager.java:1012)
     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:523)
     at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:495)
     at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1221)
     at android.view.View.dispatchRestoreInstanceState(View.java:9966)
     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2617)
     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2623)
     at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2623)
     at android.view.View.restoreHierarchyState(View.java:9944)
     at android.support.v4.app.Fragment.restoreViewState(Fragment.java:417)
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:933)
     at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1264)
     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:672)
     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
     at android.support.v4.app.FragmentManagerImpl1.run(FragmentManager.java:429)atandroid.os.Handler.handleCallback(Handler.java:608)atandroid.os.Handler.dispatchMessage(Handler.java:92)atandroid.os.Looper.loop(Looper.java:156)atandroid.app.ActivityThread.main(ActivityThread.java:4987)atjava.lang.reflect.Method.invokeNative(NativeMethod)atjava.lang.reflect.Method.invoke(Method.java:511)atcom.android.internal.os.ZygoteInit MethodAndArgsCaller.run(ZygoteInit.java:784)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
     at dalvik.system.NativeStart.main(Native Method)

复制代码【Android】java.lang.IllegalStateException: Recursive entry to executePendingTransactions

第一次使用没有问题(add),第二次使用时就报这个错(attach)。 

 

场景

嵌套Fragment使用(最外层FragmentActivity,Fragment中使用ViewPager再嵌套Fragment使用)

 

解决两种可能两种方法:

一::嵌套Fragment设置PageAdapter时要使用getChildFragmentManager。

二:重写


 @Override
 public void onDetach() {
  super.onDetach();
  try {
   Field childFragmentManager = Fragment.class     .getDeclaredField("mChildFragmentManager");
   childFragmentManager.setAccessible(true);
   childFragmentManager.set(this, null);
  } catch (NoSuchFieldException e) {
   throw new RuntimeException(e);
  } catch (IllegalAccessException e) {
   throw new RuntimeException(e);
  }
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值