首页 文章

替换包含ViewPager的片段

提问于
浏览
0

我有一个Activity包含一个Fragment容器(FrameLayout),我在Activity.onCreate()中放置一个Fragment . Fragment包含一个包含一堆片段的ViewPager . 所有这一切都很好 . 页面内容显示,我可以很好地浏览页面,甚至可以看到动作栏中的动作,因为贡献页面变得可见 .

现在我将包含ViewPager的Fragment替换为另一个Fragment:

FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.content, new NewFragment(), tag);
transaction.addToBackStack(null);
transaction.commit();

更换工作正常 . 将显示新的片段 . 当我点击后退按钮时,问题出现了,它将带有ViewPager的Fragment放回到容器视图中 . 使用常规FragmentPagerAdapter时,我得到以下异常:

FATAL EXCEPTION: main                                                                                  
java.lang.IllegalStateException: Recursive entry to executePendingTransactions                         
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1403)        
    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431) 
    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)         
    at android.support.v4.view.ViewPager.populate(ViewPager.java:895)                                  
    at android.support.v4.view.ViewPager.populate(ViewPager.java:772)                                  
    at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:380)                                
    at com.domain.app.MyFragment.onViewCreated(MyFragment.java:39)    
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)                
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)               
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)                            
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)        
    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431) 
    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)         
    at android.support.v4.view.ViewPager.populate(ViewPager.java:895)                                  
    at android.support.v4.view.ViewPager.populate(ViewPager.java:772)                                  
    at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:380)                                
    at com.domain.app.MyFragment.onViewCreated(MyFragment.java:39)    
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)                
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)               
    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:712)               
    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1480)         
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:447)      
    at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:166)                
    at android.app.Activity.onKeyUp(Activity.java:2099)

可以看出,MyFragment.onViewCreated()执行两次,在第二次传递中抛出异常 . 我试图单步执行ViewPager和FragmentManager代码,但这是一项艰巨的任务 .

此外,我已经将FragmentPagerAdapter替换为FragmentStatePagerAdapter,它实际上设法重新创建包含ViewPager但不包含ViewPager本身的片段 . 尽管有一些页面在寻呼机上显示,但页面内容仍然不可见 . 对于onPageSelected回调,滑动是不可预测的,有时可以看到动作栏中的动作是由ViewPager中的片段提供的 . 但所有这些都非常零星 .

任何帮助将不胜感激 . 谢谢 .

2 回答

  • 0

    问题被标记为不可解决,因为片段内的碎片仍然不受Hackborn女士的支持 .

  • 0

    试试这个

    FragStartCalculation FragStartCalculation = new FragStartCalculation();
        FragmentTransaction ft = root.getSupportFragmentManager().beginTransaction();
        ft.addToBackStack(FragStartCalculation.class.getName());
        ft.replace(R.id.fragContainner, FragStartCalculation, FragStartCalculation.class.getName());
        ft.commit();
    

相关问题