java.lang.IllegalStateException: Recursive entry to executePendingTransactions

来源:互联网 发布:java环境变量设置脚本 编辑:程序博客网 时间:2024/05/18 04:49

在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:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public CustomFragmentPagerAdapter(android.support.v4.app.Fragment fragment)  
  2. {  
  3.     super(fragment.getChildFragmentManager());  
  4.     // write your code here  
  5. }  

This work because new Android version approve using nested Fragments

我这里没有修改CustomFragmentPagerAdapter,而是新建CustomFragmentPagerAdapter对象时使用参数改为this.getChildFragmentManager();

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. adapter = new TabPageIndicatorAdapter(this.getChildFragmentManager());   
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <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"> /**  
  2.      * ViewPager  
  3.      * @author liwenjin  
  4.      *  
  5.      */  
  6.     class TabPageIndicatorAdapter extends FragmentPagerAdapter {  
  7.          
  8.         public TabPageIndicatorAdapter(FragmentManager  fm) {  
  9.             super(fm);  
  10.               
  11.         }  
  12.   
  13.         @Override  
  14.         public Fragment getItem(int position) {  
  15.             Fragment fragment = new ItemFragment();    
  16.             Bundle args = new Bundle();    
  17.             args.putString("arg", TITLE[position]);    
  18.             fragment.setArguments(args);    
  19.             return fragment;  
  20.         }  
  21.   
  22.         @Override  
  23.         public CharSequence getPageTitle(int position) {  
  24.             return TITLE[position % TITLE.length];  
  25.         }  
  26.   
  27.         @Override  
  28.         public int getCount() {  
  29.             return TITLE.length;  
  30.         }  
  31.     }</pre><br>  
  32. <br>  
  33. <pre></pre>  
  34. <pre></pre>  
  35. <p></p>  
  36. <pre></pre>  
  37. <pre></pre>  
  38. <span style="font-family:Verdana,Geneva,Arial,Helvetica,sans-serif; font-size:12px; color:#4b4b4b"><span style="line-height:19px">在查找资料是看到网上,这里先记下解决方案:<br>  
  39. new Handler().postDelayed(new Runnable() {<br>  
  40. @Override<br>  
  41. public void run() {<br>  
  42. // TODO Auto-generated method stub<br>  
  43. adapter = new MainFragmentPagerAdapter(getFragmentManager(), fragments);<br>  
  44. viewPager.setAdapter(adapter); <br>  
  45. switchPager(0);<br>  
  46. }<br>  
  47. }, 100);<br>  
  48. </span></span>  
  49. <h1 style="margin:0px 0px 7px; padding:0px; border:0px; vertical-align:baseline"><a name="t2"></a>  
  50. <br>  
  51. </h1>  
  52. <br>  
  53. <span style="font-family:FangSong_GB2312"><br>  
  54. </span>  
  55. <p></p>  
  56. <span style="font-family:FangSong_GB2312"><br>  
  57. </span><span style="font-family:FangSong_GB2312"><br>  
  58. <br>  
  59. </span>  
  60. <pre></pre>  
  61. <pre></pre>  
  62. </pre>  
0 0
原创粉丝点击