即使使用getChildFragmentManager递归进入executePendingTransactions

问题描述:

我有一个包含3个片段的viewpager活动。 在其中一个片段中,我有另一个viewpager,现在我知道当你想要在片段中嵌入一个片段时,你必须使用getChildFragmentManager,但由于某种原因它不适用于我。即使使用getChildFragmentManager递归进入executePendingTransactions

我有一个活动: HomeActivity

而且3个片段,其中的一个: ProfileFragment

在这里我用这对我viewpager:

// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs. 
     adapter = new ViewPagerProfileAdapter(getChildFragmentManager(),Titles,Numboftabs); 

     // Assigning ViewPager View and setting the adapter 
     pager = (ViewPager) getActivity().findViewById(R.id.pager); 
     pager.setAdapter(adapter); 

     // Assiging the Sliding Tab Layout View 
     tabs = (SlidingTabLayout) getActivity().findViewById(R.id.tabs); 
     tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width 

     // Setting Custom Color for the Scroll bar indicator of the Tab View 
     tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
      @Override 
      public int getIndicatorColor(int position) { 
       return getResources().getColor(R.color.white); 
      } 
     }); 

     // Setting the ViewPager For the SlidingTabsLayout 
     tabs.setViewPager(pager); 

这是ViewPagerProfileAdapter:

public class ViewPagerProfileAdapter extends FragmentStatePagerAdapter { 

    CharSequence Titles[]; // This will Store the Titles of the Tabs which are Going to be passed when ViewPagerAdapter is created 
    int NumbOfTabs; // Store the number of tabs, this will also be passed when the ViewPagerAdapter is created 


    // Build a Constructor and assign the passed Values to appropriate values in the class 
    public ViewPagerProfileAdapter(FragmentManager fm,CharSequence mTitles[], int mNumbOfTabsumb) { 
     super(fm); 

     this.Titles = mTitles; 
     this.NumbOfTabs = mNumbOfTabsumb; 

    } 

    //This method return the fragment for the every position in the View Pager 
    @Override 
    public Fragment getItem(int position) { 

     if(position == 0) // if the position is 0 we are returning the First tab 
     { 
      EventsFragment tab1 = new EventsFragment(); 
      return tab1; 
     } 
     else   // As we are having 3 tabs if the position is now 0 it must be 1 so we are returning second tab 
     { 
      AttendsFragment tab2 = new AttendsFragment(); 
      return tab2; 
     } 


    } 

    // This method return the titles for the Tabs in the Tab Strip 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return Titles[position]; 
    } 

    // This method return the Number of tabs for the tabs Strip 

    @Override 
    public int getCount() { 
     return NumbOfTabs; 
    } 
} 

我仍然得到这个错误:206

03-13 14:09:02.150 5040-5040/com.laurenswuyts.witpa E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.laurenswuyts.witpa, PID: 5040 
    java.lang.IllegalStateException: Recursive entry to executePendingTransactions 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1461) 
      at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486) 
      at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) 
      at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:420) 
      at com.laurenswuyts.witpa.Fragments.Profile.ProfileFragment.onActivityCreated(ProfileFragment.java:206) 
      at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1794) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:967) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489) 
      at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486) 
      at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) 
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1073) 
      at android.support.v4.view.ViewPager.populate(ViewPager.java:919) 
      at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:1896) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2059) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2119) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314) 
      at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692) 
      at android.app.Activity.dispatchTouchEvent(Activity.java:2739) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275) 
      at android.view.View.dispatchPointerEvent(View.java:8578) 
      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021) 
      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) 
      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468) 
      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578) 
      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476) 
      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) 
      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468) 
      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476) 
      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449) 
      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701) 
      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675) 
      at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5646) 
      at android.view.ViewRoot 

线是pager.setAdapter(适配器);

我自己找到了。 对于每个使用getChildFragmentManager但仍有错误的人。 为寻呼机和选项卡指定一个不同的名称,否则它将无法工作,并干扰其他寻呼机和选项卡。

+0

也可能错误不是来自“java.lang.IllegalStateException:递归进入executePendingTransactions”本身。分析logcat并在“java.lang.IllegalStateException:递归进入executePendingTransactions”之前查找其他错误。 – mariozawa 2016-06-17 09:44:13

+0

你给'寻呼机和标签另外一个名字'是什么意思。你能解释一下吗?我有同样的问题@Laurenswuyts – 2017-01-05 14:23:53

+0

@ErenUtku如果tab1的ID是=“选项卡”和tab2的ID也是“选项卡”比它将与彼此碰撞并给出问题 – Laurenswuyts 2017-01-05 14:50:42