ViewPager+Fragment 学习笔记
ViewPager+Fragment 学习笔记
在 Android 开发中,ViewPager 与 Fragment 的结合使用非常普遍,可以实现多个页面的左右滑动切换。它不仅能够让用户在不同界面之间快速切换,还能结合 Fragment 的灵活性进行页面的动态加载与管理。以下是我在学习和使用 ViewPager+Fragment 过程中所做的一些笔记和心得,希望对你有所帮助。
一、ViewPager 简介
- 概念
ViewPager 是 Android 提供的一个容器控件,允许在多个视图之间进行水平滑动切换。常用于图片轮播、引导页、新闻列表等场景。 - 主要特点
支持左右滑动切换多个页面。
通过适配器(PagerAdapter 或 FragmentPagerAdapter / FragmentStatePagerAdapter)提供数据。
可以与 TabLayout 结合,实现带有标签的滑动切换效果。
二、Fragment 简介
- 概念
Fragment 是 Android 3.0(API 11)引入的一种组件,可以看作是可复用的界面模块。每个 Fragment 都有自己的生命周期,并且能与宿主 Activity 紧密配合。 - 主要特点
可以复用界面或逻辑,减少重复代码。
支持动态添加或移除,灵活性高。
有自己的生命周期(如 onCreate、onCreateView、onResume、onPause 等),但与 Activity 的生命周期紧密相关。
三、ViewPager 与 Fragment 结合使用
-
布局文件
在 Activity 或 Fragment 的布局文件中,添加一个 ViewPager 控件。例如:<androidx.viewpager.widget.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> -
创建 Fragment 类
每个页面对应一个 Fragment,可以在其中编写各自的布局与逻辑。示例:public class PageFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_page, container, false); } } -
编写 PagerAdapter
若页面数量固定且不大,可以使用FragmentPagerAdapter;若页面较多,或需要动态添加删除页面,推荐使用FragmentStatePagerAdapter。示例:public class MyPagerAdapter extends FragmentStatePagerAdapter { private List<Fragment> fragmentList; public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) { super(fm); this.fragmentList = fragments; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } } -
绑定适配器
在 Activity 中,初始化 ViewPager 并设置适配器:ViewPager viewPager = findViewById(R.id.viewPager); List<Fragment> fragments = new ArrayList<>(); fragments.add(new PageFragment()); fragments.add(new PageFragment()); // 根据需要添加更多 Fragment MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), fragments); viewPager.setAdapter(adapter); -
与 TabLayout 结合(可选)
如果需要顶部标签切换,可以使用TabLayout并与ViewPager进行绑定:TabLayout tabLayout = findViewById(R.id.tabLayout); tabLayout.setupWithViewPager(viewPager);
四、Fragment 的生命周期示意图
下面是一张常见的 Fragment 生命周期示意图,帮助理解 Fragment 在不同阶段的回调方法。
![Fragment 生命周期]

五、注意事项
- 预加载问题
ViewPager 默认会预加载相邻的页面,如果页面数量多且每个页面的数据量大,可能会造成内存开销。可以使用viewPager.setOffscreenPageLimit(int limit)来调整预加载数量。 - 内存管理
使用FragmentPagerAdapter时,所有 Fragment 会被保存在内存中,适用于页面较少的情况。
使用FragmentStatePagerAdapter时,销毁页面时会自动回收 Fragment 的视图,适用于页面较多的场景。 - 与 Activity 的通信
Fragment 可以通过getActivity()获取宿主 Activity,也可以使用接口回调的方式在 Fragment 与 Activity 间传递数据。
在处理生命周期相关逻辑时,要注意 Fragment 只有在onAttach之后才正式与 Activity 建立联系。
六、总结
ViewPager 与 Fragment 的组合能够高效地管理多页面切换,既提升了用户体验,也便于我们对各页面进行独立维护。掌握 Fragment 的生命周期以及适配器的选择,对于保证应用的性能和稳定性至关重要。在实际开发中,建议结合实际需求(如页面数量、数据量、性能要求等)选择合适的适配器,并根据 Fragment 的生命周期合理地加载与销毁资源。
小贴士:若需要实现更丰富的切换效果,还可以自定义
PageTransformer,为 ViewPager 添加不同的动画过渡效果。
参考资料
官方文档:Fragments
官方文档:ViewPager
以上便是我对 “ViewPager + Fragment” 的一些学习和总结。

浙公网安备 33010602011771号