在代码中的Fragment中二次嵌套了ViewPager,然后使用FragmentPagerAdapter适配器,下面贴出主要代码:
public class MainStatisticsFragment extends MyBaseFragment<MainSellerActivity> { @BindView(R.id.tv_title) TextView tvTitle; @BindView(R.id.tabIndicatorView) TabLayout tabIndicatorView; @BindView(R.id.viewPager) ViewPager viewPager; private List<MyBaseFragment<MainSellerActivity>> listFragment = new ArrayList<MyBaseFragment<MainSellerActivity>>(); private MyFragmentAdapter mMyFragmentAdapter; View rootView; @Override public View initView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if (rootView == null) { rootView = inflater.inflate(R.layout.seller_main_fragment_statistics, container, false); unbinder = ButterKnife.bind(this, rootView); tvTitle.setText(R.string.seller_main_statistics_title); } return rootView; } @Override public void initData() { MainStatisticsGoodsFragment goods = new MainStatisticsGoodsFragment(); goods.setTitle(getString(R.string.seller_main_statistics_goods)); listFragment.add(goods); MainStatisticsVisitorFragment visitor = new MainStatisticsVisitorFragment(); visitor.setTitle(getString(R.string.seller_main_statistics_visitor)); listFragment.add(visitor); MainStatisticsOrderFragment order = new MainStatisticsOrderFragment(); order.setTitle(getString(R.string.seller_main_statistics_order)); listFragment.add(order); //在这里初始化FragmentAdapter,这里使用的是getSupportFragmentManager()获取到了父级FragmentManager mMyFragmentAdapter = new MyFragmentAdapter(mActivity.getSupportFragmentManager(),listFragment); viewPager.setAdapter(mMyFragmentAdapter); tabIndicatorView.setupWithViewPager(viewPager); } private class MyFragmentAdapter extends FragmentPagerAdapter { private List<MyBaseFragment<MainSellerActivity>> listData; public MyFragmentAdapter(FragmentManager fm, List<MyBaseFragment<MainSellerActivity>> listData) { super(fm); this.listData = listData; } @Override public Fragment getItem(int position) { return listData.get(position); } @Override public int getCount() { return listData.size(); } @Override public CharSequence getPageTitle(int position) { return listFragment.get(position).getTitle(); } } }出现Viewpager的内容无法显示的问题:
关键代码就在于这一句:
//在这里初始化FragmentAdapter,这里使用的是getSupportFragmentManager()获取到了父级FragmentManager mMyFragmentAdapter = new MyFragmentAdapter(mActivity.getSupportFragmentManager(),listFragment);这里使用的是父级Activity的Fragmentmanager,所以出现了父子共用FragmentManager的情况,导致内部的Fragment无法正常显示,想要让内部的Fragment显示,只需要把mActivity.getSupportFragmentManager()修改为getChildFragmentManager()即可;
关键代码:
mMyFragmentAdapter = new MyFragmentAdapter(getChildFragmentManager(),listFragment);效果图:
