Android TabLayout-ViewPager-片段

Android TabLayout-ViewPager-片段,android,android-viewpager,fragment,android-tablayout,Android,Android Viewpager,Fragment,Android Tablayout,我的ViewPager及其包含的片段有问题。我有两个菜单(A和B),我的主页直接是A。当我点击一个菜单B片段,其中包含一个TabLayout,其中包含一个ViewPager本身三个片段(每个片段包含一个带有Lorem ipsum的简单文本视图)。 ViewPager的3个片段是正确的,但如果我单击菜单A并再次单击菜单B,则没有任何内容。片段1和片段2上的任何内容与第3个片段的内容都不一致,如果我返回片段1,则读取income(片段2上的任何内容) 这是我的密码: 菜单B(可分割布局) 公共类t

我的ViewPager及其包含的片段有问题。我有两个菜单(A和B),我的主页直接是A。当我点击一个菜单B片段,其中包含一个TabLayout,其中包含一个ViewPager本身三个片段(每个片段包含一个带有Lorem ipsum的简单文本视图)。 ViewPager的3个片段是正确的,但如果我单击菜单A并再次单击菜单B,则没有任何内容。片段1和片段2上的任何内容与第3个片段的内容都不一致,如果我返回片段1,则读取income(片段2上的任何内容)

这是我的密码:

菜单B(可分割布局)

公共类tablayoufragment扩展片段{
私有静态最终字符串ARG_TEXT=“ARG_TEXT”;
私有静态最终字符串ARG\u COLOR=“ARG\u COLOR”;
专用工具栏;
私人摊位摊位;
私人视页机视页机;
公共表格{
//必需的空公共构造函数
}
公共静态TabLayoutFragment newInstance(字符串文本,int颜色){
Bundle args=新Bundle();
args.putString(ARG_TEXT,TEXT);
参数putInt(参数颜色,颜色);
TabLayoutFragment TabLayoutFragment=新的TabLayoutFragment();
tablayoufragment.setArguments(args);
返回表碎片;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
设置选项菜单(真);
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u tab\u布局,容器,false);
toolbar=(toolbar)view.findviewbyd(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(工具栏);
setBackgroundColor(getArguments().getInt(ARG_COLOR));
setTitle(getArguments().getString(ARG_TEXT));
viewPager=(viewPager)view.findViewById(R.id.viewPager);
设置viewPager(viewPager);
tabLayout=(tabLayout)view.findviewbyd(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setBackgroundColor(getArguments().getInt(ARG_COLOR));
表格布局。设置选定的标签或颜色(颜色。白色);
返回视图;
}
@凌驾
创建选项菜单(菜单菜单,菜单充气机){
充气机。充气(右菜单。选项卡菜单,菜单);
super.onCreateOptions菜单(菜单,充气机);
}
专用无效设置ViewPager(ViewPager ViewPager){
ViewPagerAdapter适配器=新的ViewPagerAdapter(getActivity().getSupportFragmentManager());
viewPager.setAdapter(适配器);
}
类ViewPagerAdapter扩展了FragmentPagerAdapter{
//私有最终列表MFFragmentList=new ArrayList();
//私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
开关(位置){
案例0:
返回TabFragment.newInstance(“片段2-1”);
案例1:
返回TabFragment.newInstance(“片段2-2”);
案例2:
返回TabFragment.newInstance(“片段2-3”);
违约:
返回TabFragment.newInstance(“片段默认值”);
}
}
@凌驾
public int getCount(){
//返回MFFragmentList.size();
返回3;
}
}

}
您可以扩展ViewPagerAdapter

FragmentStatePagerAdapter
而不是

FragmentPagerAdapter

我也有同样的问题,它对我很有效。

在我看来,更好的方法是您应该尝试使用
childFragmentManager
来处理嵌套片段

下面是一个简单的例子:

private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getActivity().getChildFragmentManager());
        viewPager.setAdapter(adapter);
    }

希望它能解决您的问题。

Thx Roman给出了这个好答案,但我问自己,我将来会使用我的片段,它将包含大量的数据(网格布局)以及图像和文本。最简单的方法->