再次返回ViewPager数据不显示

页面的整体布局是: Fragment+ViewPager+Fragment

Fragment中放一个ViewPager,ViewPager中又容纳多个Fragment

如图所示 , 底部的4个按钮是用FragmentTabHost做的, 分别对应4个Fragment.(暂且称之为 大Fragment)
商城的Fragment又是Indicator+ViewPager的布局,
ViewPager中每个页面又是Fragment.(暂且称之为 小Fragment)

当第一次打开商城页面时,ViewPager中的数据是可以正常显示的. 但是如果点击了其他页面,比如消息页面,再去打开商城页面的话, ViewPager中的数据就不会显示.

但也不是所有的数据不显示,只是离开时已经加载进内存的不会显示. 比如说, 离开商城页面时,我选中的Tab是 “旺铺”,那么”旺铺”的下一个Tab “推荐”也是已经加载进内存的. 那么我再返回到商城页面时, “旺铺”和”推荐”两个Tab对应的ViewPager中的页面就不会有数据, 但是滑动到其他的页面,数据可以显示.

在商城的 大Fragment中:
mViewPager.setAdapter(new MallPagerAdapter((getActivity().getSupportFragmentManager())));
其中MallPagerAdapter是继承FragmentStatePagerAdapter的.
打印Log看了一下:
再返回商城页面时, setAdapter是可以执行的, 但是 MallPagerAdapter中的getItem(int position)却不执行(想想确实也应该这样,因为已经加载过了么,所以就不执行了)

网上查了一下, 说是把getSupportFragmentManager()改成getChildFragmentManager(), 但是我改成了getChildFragmentManager(),说是方法为定义.
再查一下,说是V4 包的问题, 我就换了个目前最新的, 还是没有这个方法.
把getActivity().getChildFragmentManager()改成 this.getChildFragmentManager()还是没有这个方法.
再次返回ViewPager数据不显示_第1张图片

最后仔细想了想, 既然Adapter中的getItem不执行, 那就换个每次ViewPager可见时都执行的方法, 这个方法就是instantiateItem,那么解决方法就来了:

  1. 将 MallPagerAdapter 改为继承 PagerAdapter, 这样就Adapter中就可以复写instantiateItem方法,这个方法在每次ViewPager可见时都会执行.
  2. 将ViewPager中的每个Pager页面的的Fragment改为普通的View对象.(原先每个pager有Fragment做展示的,现在改为写一个普通的类,这个类中inflate布局文件获得View对象,有这个View对象展示每一个Pager)

你可能感兴趣的:(android,viewpager,Fragment,再次返回数据不显示)