findFragmentByTag()仅在ActioBar的第三个选项卡上返回null

时间:2014-12-28 21:35:52

标签: android android-fragments android-actionbar android-actionbar-compat android-actionbaractivity

我使用Android提供的带有Activityandroid.support.v7.app.ActionBar.TabListenerViewPager的标签FragmentPagerAdapter。父Activty加入并管理三个Fragment。此外,父Activity还有一种方法来保存片段提供的数据。为了获得在其中定义的数据(并且没有由父Activity发送),我写了以下代码:

MyFragment frag = (MyFragment) mSectionsPagerAdapter.getActiveFragment(mViewPager,1,getSupportFragmentManager());

getActiveFragment()

的位置
        public Fragment getActiveFragment(ViewPager container, int position, FragmentManager mFragmentManager) {
            String name = makeFragmentName(container.getId(), position);
            return  mFragmentManager.findFragmentByTag(name);
        }


        private String makeFragmentName(int viewId, int index) {
            return "android:switcher:" + viewId + ":" + index;
        }

实际上,我遇到了以下问题:当我尝试保存三个片段提供的数据时,我有一个java.lang.NullPointerException由第三个片段引起,它是null。只有在我的设备上没有显示第二个或第三个片段时才会发生这种情况。 我不明白如何避免和解决这种行为。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这是因为如果仅显示第一个制表符/片段,则不会创建第三个片段。 默认情况下,ViewPager在内部准备可见片段,左边的片段和右边的片段。 试试

viewpager.setOffscreenPageLimit(2)