利用Fragment将多个页面集成到一个Activity中
什么是Fragment?
Fragment可以看作是Activity,只不过通过Fragment可以实现一个Activity中含有多个界面
将多个Fragment集成到一个Activity的流程
1.创建一个或多个继承了Fragment的类
2.创建一个继承了FragmentPagerAdapter的适配器
3.通过该适配器把多个Fragment集成到Activity的ViewPager容器中(通过ViewPager可以实现左右滑动)

简单实例
1.界面布局
只需要在Activity中需要集成多个界面的地方放置一个ViewPager
例:中间是ViewPager,下面是一个radioGroup(可忽略)

2.创建多个继承了Fragment类并重写其onCreateView方法
把该类看作Avtivity即可
public class AAAFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //获得当前fragment对应的layout View view = inflater.inflate(R.layout.activity_aaa, container, false); return view; } }
3.创建一个继承了FragmentPagerAdapter的适配器
public class MyFragmentPagerAdapter extends FragmentPagerAdapter { //继承FragmentPagerAdapter List<Fragment> fragmentList; //Fragment集合 public MyFragmentPagerAdapter2(FragmentManager fm, List<Fragment> fragmentList) { super(fm); this.fragmentList=fragmentList; //在new该适配器的时候传入Fragment集合 } @Override public Fragment getItem(int position) { //通过索引获取单个Fragment return fragmentList.get(position); } @Override public int getCount() { //获得Fragment集合Size return fragmentList.size(); } }
4.通过适配器把多个Fragment集成到Activity的ViewPager容器中
public class MainActivity extends AppCompatActivity { List<Fragment> fragmentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); initFragmentList(); //初始化Fragment集合 ViewPager vp = (ViewPager) findViewById(R.id.viewPager); //获得ViewPager容器 //把Fragment集合放到适配器中 MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(), fragmentList); //给ViewPager设置适配器 vp.setAdapter(adapter); } protected void initFragmentList(){ //初始化Fragment集合 fragmentList = new ArrayList<Fragment>(); fragmentList.add(new AAAFragment()); fragmentList.add(new BBBFragment()); fragmentList.add(new CCCFragment()); } }
效果如下

其他细节
关于ViewPager:
1.ViewPager可以使用户左右滑动切换当前界面
2.ViewPager直接继承了ViewGroup类,所以他是容器类
关于FragmentPagerAdapter与FragmentStateAdapter区别:
1.前者会将生成的每一个Fragment保存在内存中,适用于Fragment较少的情况
2.后者是用一个生成一个,适用于Fragment较多的情况

浙公网安备 33010602011771号