Android - ViewPager2 Fragment
文章目录
- 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.xml
和 BlankFragment.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相关推荐
- Android viewPager2 + fragment 模拟微信首页2(滑动页面标签同步变化,点击标签滑动页面)
可以实现的方式:BottomNavigationView 这里我们不使用BottomNavigationView,手动来写代码 先看一下效果 fragment + viewPager2模拟微信首页2( ...
- ViewPager2+Fragment操作笔记
ViewPager2+Fragment操作笔记 文章目录 ViewPager2+Fragment操作笔记 ViewPager2简介 实际操作效果 RecycleView和Viewpage2的滑动冲突 ...
- ViewPager2+Fragment
复习 1.Fragment的产生 Fragment可以看成是一个小的Activity,但是你是否知道Fragment产生的原因是什么? Fragment,中文翻译就是 碎片,Fragments 在活动 ...
- android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)
之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...
- Android 在Fragment中执行onActivityResult不被调用的简单解决方法
Android 在Fragment中执行onActivityResult不被调用的简单解决方法 参考文章: (1)Android 在Fragment中执行onActivityResult不被调用的简单 ...
- android碎片按钮,Android 碎片(Fragment)
Android 碎片(Fragment) 碎片是活动的一部分,使得活动更加的模块化设计.我们可以认为碎片是一种子活动. 下面是关于碎片的重要知识点 - 碎片拥有自己的布局,自己的行为及自己的生命周期回 ...
- Android 进阶 Fragment 介绍和使用 (一)
Fragment概述 Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一 ...
- Android之Fragment使用简介
Fragment是Android 3.0 (API level 11)后推出的新功能.Android3.0以前的版本也能用Fragment,不过得给工程导入一个android-support-v4.j ...
- android 之Fragment的详解
友情链接:点击打开链接 1.将Activity传值到Fragment 具体步骤: <1>声明碎片事务器对象 private FragmentManager fragmentManager; ...
最新文章
- springcloud与dubbo对比:
- Xamarin Android项目提示SDK版本太老
- OVS bridgebundleport分析(三十四)
- 关于.net的.dll.refresh文件
- xpath contains_Python 爬虫进阶: Scrapy Shell 和 Xpath 学习心得
- vc++ List Control控件获得所有选中行的序号
- CF1000G. Two-Paths(树形dp)
- 第九章:在Spark集群上掌握比较重要的图操作之Structural Operators
- java servlet 执行 多次_servlet 验证生命周期过程调用方法的次数
- python 3.3.3 字面量,正则,反斜杠和原始字符串
- daily news新闻阅读客户端应用源码(兼容iPhone和iPad)
- Onvif协议:IPC客户端开发之图像抓拍
- 地球经纬度java语言表示_java根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)-Go语言中文社区...
- PDF 文档拆分工具包
- excel表格打印每页都有表头_EXCEL打印小技巧:如何打印出每张纸上都有表头标题的表格?...
- git第一次提交不能使用git commit -a -m
- webrtc 带宽估计
- 语音标注必须了解的基础知识点
- ICAP client 获取ICAP server 的Options
- 古代的银子和现在的人民币换算关系..
热门文章
- 天天向上的力量实例详解(持续的价值)
- githubhosts无法建立 SSL 连接。
- Android手机上的SSL连接错误怎么解决?
- 华为java机试题限时多久_年薪35万的华为机试题,你完成需要多长时间?
- C#使用GDI绘图九宫格与方位(2)增加点击查看详细,接上篇
- 持软考高级证书落户深圳最高能加125分!!!
- 优秀的windows软件推荐(内存整理和文件解除占用)
- VC运行库合集2005/2008/2010/2012/2013/2015
- 基于比较的常见的排序算法
- 基于人工智能技术的的拥塞控制的基本原理—— PCC Vivace