先看一段错误代码,这段代码写在一个 Fragment 中:
<code class="hljs cs has-numbering"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">initView</span>(){ mViewPageAdpater = <span class="hljs-keyword">new</span> ViewPageAdpater( getFragmentManager() ); mFragments.add( <span class="hljs-keyword">new</span> BoonListFragment() ); mTitles.add( <span class="hljs-string">"title1"</span> ); mFragments.add( <span class="hljs-keyword">new</span> BoonListFragment() ); mTitles.add( <span class="hljs-string">"title2"</span> ); mFragments.add( <span class="hljs-keyword">new</span> BoonListFragment() ); mTitles.add( <span class="hljs-string">"title3"</span> ); mViewPageAdpater.setFragments( mFragments, mTitles ); }</code><ul class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li></ul><div class="save_code tracking-ad" style="display: none;" data-mod="popu_249"><a target=_blank target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png" alt="" /></a></div>
这段代码看上去一切正常,但是有时候就是好好的就是现实不出来,找来找去死活找不到原因。
一切东西都是普通的再不普通不过的 List 或者 Adapter,List这么简单的东西还能出问题?
那就是Adapter的问题了,Adapter里面实现的不对吗?也没有问题啊,就那么简单的几个方法。
最后终于发现,问题就在 new ViewPageAdpater( getFragmentManager() ); 这里。
之前就知道 fragment中嵌套fragment 应该使用 getChildFragmentManager() ,每次用起来都是忘了。
正确的写法:
<code class="hljs cs has-numbering"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">initView</span>(){ mViewPageAdpater = <span class="hljs-keyword">new</span> ViewPageAdpater( getChildFragmentManager() ); mFragments.add( <span class="hljs-keyword">new</span> BoonListFragment() ); mTitles.add( <span class="hljs-string">"title1"</span> ); mFragments.add( <span class="hljs-keyword">new</span> BoonListFragment() ); mTitles.add( <span class="hljs-string">"title2"</span> ); mFragments.add( <span class="hljs-keyword">new</span> BoonListFragment() ); mTitles.add( <span class="hljs-string">"title3"</span> ); mViewPageAdpater.setFragments( mFragments, mTitles ); }</code><ul class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li></ul><div class="save_code tracking-ad" style="display: none;" data-mod="popu_249"><a target=_blank target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png" alt="" /></a></div>
以后每当在 Fragment 中要用到 FragmentManager 的时候一定要记住,使用 getChildFragmentManager()。