文章目录

  • 1. 效果
  • 2. 添加ViewPager2控件
  • 3. 添加Fragment页面
  • 4. 添加FragmentStateAdapter类的继承类
  • 5. 添加ViewPager2的逻辑
  • 6. 示例代码
  • 7. 参考

1. 效果

类似上一篇文章 Android - ViewPager2
只是改用Fragment实现每个页面

2. 添加ViewPager2控件

在activity_main.xml中添加 androidx.viewpager2.widget.ViewPager2 控件, 有些版本可能提示无此控件,需要在 build.gradle中添加依赖:implementation 'androidx.viewpager2:viewpager2:1.0.0'

添加ViewPager2控件后,activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.viewpager2.widget.ViewPager2android:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

3. 添加Fragment页面

layout右键new,选择Fragment -> Fragment(Blank)

添加后会出现 fragment_blank.xmlBlankFragment.java 两个文件。

fragment_blank.xml 中的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".BlankFragment"><!-- TODO: Update blank fragment layout --><TextViewandroid:id="@+id/fragment_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textSize="30sp"android:text="@string/hello_blank_fragment" /></FrameLayout>

BlankFragment.java代码修改如下:

public class BlankFragment extends Fragment {// TODO: Rename parameter arguments, choose names that match// the fragment initialization parameters, e.g. ARG_ITEM_NUMBERprivate static final String ARG_PARAM1 = "param1";// TODO: Rename and change types of parametersprivate String mParam1;private TextView mFragmentTv;private View mFragmentView;public BlankFragment() {// Required empty public constructor}/*** Use this factory method to create a new instance of* this fragment using the provided parameters.** @param param1 Parameter 1.* @return A new instance of fragment BlankFragment.*/// TODO: Rename and change types and number of parameterspublic static BlankFragment newInstance(String param1) {BlankFragment fragment = new BlankFragment();Bundle args = new Bundle();args.putString(ARG_PARAM1, param1);fragment.setArguments(args);return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getArguments() != null) {mParam1 = getArguments().getString(ARG_PARAM1);}}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentif (mFragmentView == null){mFragmentView = inflater.inflate(R.layout.fragment_blank, container, false);mFragmentTv = mFragmentView.findViewById(R.id.fragment_tv);mFragmentTv.setText(mParam1);}return mFragmentView;}
}

4. 添加FragmentStateAdapter类的继承类

public class MyFragmentStateAdapter extends FragmentStateAdapter {private List<Fragment> mFragmentList;public MyFragmentStateAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List<Fragment> fragments) {super(fragmentManager, lifecycle);mFragmentList = fragments;}@NonNull@Overridepublic Fragment createFragment(int position) {return mFragmentList.get(position);}@Overridepublic int getItemCount() {return mFragmentList.size();}
}

5. 添加ViewPager2的逻辑

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ViewPager2 viewPager2 = findViewById(R.id.viewpager);List<Fragment> fragmentList = new ArrayList<>();fragmentList.add(BlankFragment.newInstance("第一个页面"));fragmentList.add(BlankFragment.newInstance("第二个页面"));fragmentList.add(BlankFragment.newInstance("第三个页面"));fragmentList.add(BlankFragment.newInstance("第四个页面"));fragmentList.add(BlankFragment.newInstance("第五个页面"));viewPager2.setAdapter(new MyFragmentStateAdapter(getSupportFragmentManager(), getLifecycle(), fragmentList));}
}

6. 示例代码

ViewPager2 Fragment 示例代码

7. 参考

更多详细ViewPager2的例子,可以参考Android官方示例:Android ViewPager2 官方示例

Android - ViewPager2 Fragment相关推荐

  1. Android viewPager2 + fragment 模拟微信首页2(滑动页面标签同步变化,点击标签滑动页面)

    可以实现的方式:BottomNavigationView 这里我们不使用BottomNavigationView,手动来写代码 先看一下效果 fragment + viewPager2模拟微信首页2( ...

  2. ViewPager2+Fragment操作笔记

    ViewPager2+Fragment操作笔记 文章目录 ViewPager2+Fragment操作笔记 ViewPager2简介 实际操作效果 RecycleView和Viewpage2的滑动冲突 ...

  3. ViewPager2+Fragment

    复习 1.Fragment的产生 Fragment可以看成是一个小的Activity,但是你是否知道Fragment产生的原因是什么? Fragment,中文翻译就是 碎片,Fragments 在活动 ...

  4. android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)

    之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...

  5. Android 在Fragment中执行onActivityResult不被调用的简单解决方法

    Android 在Fragment中执行onActivityResult不被调用的简单解决方法 参考文章: (1)Android 在Fragment中执行onActivityResult不被调用的简单 ...

  6. android碎片按钮,Android 碎片(Fragment)

    Android 碎片(Fragment) 碎片是活动的一部分,使得活动更加的模块化设计.我们可以认为碎片是一种子活动. 下面是关于碎片的重要知识点 - 碎片拥有自己的布局,自己的行为及自己的生命周期回 ...

  7. Android 进阶 Fragment 介绍和使用 (一)

    Fragment概述 Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一 ...

  8. Android之Fragment使用简介

    Fragment是Android 3.0 (API level 11)后推出的新功能.Android3.0以前的版本也能用Fragment,不过得给工程导入一个android-support-v4.j ...

  9. android 之Fragment的详解

    友情链接:点击打开链接 1.将Activity传值到Fragment 具体步骤: <1>声明碎片事务器对象 private FragmentManager fragmentManager; ...

最新文章

  1. springcloud与dubbo对比:
  2. Xamarin Android项目提示SDK版本太老
  3. OVS bridgebundleport分析(三十四)
  4. 关于.net的.dll.refresh文件
  5. xpath contains_Python 爬虫进阶: Scrapy Shell 和 Xpath 学习心得
  6. vc++ List Control控件获得所有选中行的序号
  7. CF1000G. Two-Paths(树形dp)
  8. 第九章:在Spark集群上掌握比较重要的图操作之Structural Operators
  9. java servlet 执行 多次_servlet 验证生命周期过程调用方法的次数
  10. python 3.3.3 字面量,正则,反斜杠和原始字符串
  11. daily news新闻阅读客户端应用源码(兼容iPhone和iPad)
  12. Onvif协议:IPC客户端开发之图像抓拍
  13. 地球经纬度java语言表示_java根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)-Go语言中文社区...
  14. PDF 文档拆分工具包
  15. excel表格打印每页都有表头_EXCEL打印小技巧:如何打印出每张纸上都有表头标题的表格?...
  16. git第一次提交不能使用git commit -a -m
  17. webrtc 带宽估计
  18. 语音标注必须了解的基础知识点
  19. ICAP client 获取ICAP server 的Options
  20. 古代的银子和现在的人民币换算关系..

热门文章

  1. 天天向上的力量实例详解(持续的价值)
  2. githubhosts无法建立 SSL 连接。
  3. Android手机上的SSL连接错误怎么解决?
  4. 华为java机试题限时多久_年薪35万的华为机试题,你完成需要多长时间?
  5. C#使用GDI绘图九宫格与方位(2)增加点击查看详细,接上篇
  6. 持软考高级证书落户深圳最高能加125分!!!
  7. 优秀的windows软件推荐(内存整理和文件解除占用)
  8. VC运行库合集2005/2008/2010/2012/2013/2015
  9. 基于比较的常见的排序算法
  10. 基于人工智能技术的的拥塞控制的基本原理—— PCC Vivace