在Fragment里面添加Viewpager,Viewpager由多个Fragment组成
java.lang.IllegalStateException: Recursive entry to executePendingTransactions
找到发送错误的地方是viewpager.setAdapter()处。
我的应用场景是: 嵌套使用Fragment使用,最外层使用了一个第三方的库,里面使用FragmentActivity,每个Fragment中又使用ViewPager再嵌套Fragment
解决方法:嵌套Fragment设置PageAdapter时要使用getChildFragmentManager。
New version of Support Library v4 (or Android 4.2, ofcourse) resolve this problem much simply. For do this, simply do constructor of your custom FragmentPagerAdapter like this:
- public CustomFragmentPagerAdapter(android.support.v4.app.Fragment fragment)
- {
- super(fragment.getChildFragmentManager());
- // write your code here
- }
This work because new Android version approve using nested Fragments
我这里没有修改CustomFragmentPagerAdapter,而是新建CustomFragmentPagerAdapter对象时使用参数改为this.getChildFragmentManager();
- adapter = new TabPageIndicatorAdapter(this.getChildFragmentManager());
- <pre code_snippet_id="192943" snippet_file_name="blog_20140218_3_1903573" name="code" class="html" style="color: rgb(75, 75, 75); font-size: 13px; line-height: 19px; ">TabPageIndicatorAdapter类内容不变:</pre><pre code_snippet_id="192943" snippet_file_name="blog_20140218_4_2776408" name="code" class="html" style="color: rgb(75, 75, 75); font-size: 13px; line-height: 19px; "><pre code_snippet_id="192943" snippet_file_name="blog_20140218_4_2776408" name="code" class="html"> /**
- * ViewPager
- * @author liwenjin
- *
- */
- class TabPageIndicatorAdapter extends FragmentPagerAdapter {
- public TabPageIndicatorAdapter(FragmentManager fm) {
- super(fm);
- }
- @Override
- public Fragment getItem(int position) {
- Fragment fragment = new ItemFragment();
- Bundle args = new Bundle();
- args.putString("arg", TITLE[position]);
- fragment.setArguments(args);
- return fragment;
- }
- @Override
- public CharSequence getPageTitle(int position) {
- return TITLE[position % TITLE.length];
- }
- @Override
- public int getCount() {
- return TITLE.length;
- }
- }</pre><br>
- <br>
- <pre></pre>
- <pre></pre>
- <p></p>
- <pre></pre>
- <pre></pre>
- <span style="font-family:Verdana,Geneva,Arial,Helvetica,sans-serif; font-size:12px; color:#4b4b4b"><span style="line-height:19px">在查找资料是看到网上,这里先记下解决方案:<br>
- new Handler().postDelayed(new Runnable() {<br>
- @Override<br>
- public void run() {<br>
- // TODO Auto-generated method stub<br>
- adapter = new MainFragmentPagerAdapter(getFragmentManager(), fragments);<br>
- viewPager.setAdapter(adapter); <br>
- switchPager(0);<br>
- }<br>
- }, 100);<br>
- </span></span>
- <h1 style="margin:0px 0px 7px; padding:0px; border:0px; vertical-align:baseline"><a name="t2"></a>
- <br>
- </h1>
- <br>
- <span style="font-family:FangSong_GB2312"><br>
- </span>
- <p></p>
- <span style="font-family:FangSong_GB2312"><br>
- </span><span style="font-family:FangSong_GB2312"><br>
- <br>
- </span>
- <pre></pre>
- <pre></pre>
- </pre>