位置: IT常识 - 正文

Android ViewPager2 + Fragment 联动

编辑:rootadmin
Android ViewPager2 + Fragment 联动 本篇主要介绍一下 ViewPager2 + Fragment , 上篇中简单使用了ViewPager2 实现了一个图片的滑动效果, 那图片视图可以滑动, ViewPager2也可以滑动 Fragment 概述 ViewPager2 官 ... Android ViewPager2 + Fragment 联动

推荐整理分享Android ViewPager2 + Fragment 联动,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

本篇主要介绍一下 ViewPager2 + Fragment , 上篇中简单使用了ViewPager2 实现了一个图片的滑动效果, 那图片视图可以滑动, ViewPager2也可以滑动 Fragment

概述

ViewPager2 官方对它的描述就是 以可滑动的格式显示视图或 Fragment 也就说明提供了滑动Fragment的实现 并且还很简单, 下面来看看吧

实现思路1.Activity 布局文件中引入 ViewPager2 控件2.编写 Fragment 用于填充到ViewPager2中3.编写Adapter 实现 FragmentStateAdapter

下面用实际代码 来展示 滑动Fragment

代码实现Activity 布局文件中引入 ViewPager2 控件<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout 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" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".ViewPage2FragmentActivity"> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/viewpager2fragment" android:layout_width="match_parent" android:layout_height="300dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:background="@color/pink" /></androidx.constraintlayout.widget.ConstraintLayout>Android ViewPager2 + Fragment 联动

编写 Fragment 用于填充到ViewPager2中package com.johnny.slzzing;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.fragment.app.Fragment;/** * A simple {@link Fragment} subclass. * Use the {@link ViewPage2Fragment#newInstance} factory method to * create an instance of this fragment. */public class ViewPage2Fragment extends Fragment { // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; // TODO: Rename and change types of parameters private String mParam1; private String mParam2; public ViewPage2Fragment() { // Required empty public constructor } /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param param1 Parameter 1. * @param param2 Parameter 2. * @return A new instance of fragment ViewPage2Fragment. */ // TODO: Rename and change types and number of parameters public static ViewPage2Fragment newInstance(String param1, String param2) { ViewPage2Fragment fragment = new ViewPage2Fragment(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); args.putString(ARG_PARAM2, param2); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_view_page2, container, false); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); TextView textView = view.findViewById(R.id.fragmenttextview); textView.setText(mParam1); }}fragment_view_page2<?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=".ViewPage2Fragment"> <!-- TODO: Update blank fragment layout --> <TextView android:id="@+id/fragmenttextview" android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" android:gravity="center" android:textSize="25sp" android:textColor="@color/black" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

fragment 很简单 就在中间有个TextView 区分不同的fragment

编写Adapter 实现 FragmentStateAdapterpackage com.johnny.slzzing;import android.os.Bundle;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.Fragment;import androidx.fragment.app.FragmentActivity;import androidx.viewpager2.adapter.FragmentStateAdapter;import androidx.viewpager2.widget.ViewPager2;import java.util.Arrays;import java.util.List;public class ViewPage2FragmentActivity extends AppCompatActivity { ViewPager2 viewPage2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_page2_fragment); viewPage2 = findViewById(R.id.viewpager2fragment); ViewPager2FragmentAdapter viewPager2FragmentAdapter = new ViewPager2FragmentAdapter(this , initFragmentList()); //重点 ! 把 viewPage2设置adapter 这个adapter 不是去直接继承RecycleView.Adapter了 viewPage2.setAdapter(viewPager2FragmentAdapter); } //初始化3个fragment private List<Fragment> initFragmentList() { ViewPage2Fragment viewPage2Fragment = ViewPage2Fragment.newInstance("我是Fragment1", ""); ViewPage2Fragment viewPage2Fragment2 = ViewPage2Fragment.newInstance("我是Fragment2", ""); ViewPage2Fragment viewPage2Fragment3 = ViewPage2Fragment.newInstance("我是Fragment3", ""); return Arrays.asList(viewPage2Fragment,viewPage2Fragment2,viewPage2Fragment3); } // 提供了FragmentStateAdapter 只需要继承它即可 不用继承RecycleView.Adapter static class ViewPager2FragmentAdapter extends FragmentStateAdapter{ private final List<Fragment> fragmentList; public ViewPager2FragmentAdapter(@NonNull FragmentActivity fragmentActivity, List<Fragment> fragmentList) { super(fragmentActivity); this.fragmentList = fragmentList; } @NonNull @Override public Fragment createFragment(int position) { return fragmentList.get(position); } @Override public int getItemCount() { return fragmentList.size(); } }}效果

粉色区域是可以滑动切换 不同的Fragment 的

总结

本篇主要介绍了 ViewPager2 结合 Fragment 的基本使用方式 , 让我们可以快速的实现滑动Fragment 的功能. 后续还可以结合 BottomNavigationView 联动 底部导航栏+滑动, 有机会再说把

欢迎大家访问 个人博客 Johnny小屋欢迎关注个人公众号

本文链接地址:https://www.jiuchutong.com/zhishi/310887.html 转载请保留说明!

上一篇:深入理解python中的yield(python深入浅出)

下一篇:帝国cms修改提示框样式以及跳转时间的方法(帝国cms修改提示怎么设置)

  • 装修行业小规模纳税人标准
  • 高新技术认定研发费用要求
  • 金税盘递减税款2022
  • 客运地方税务局监制发票还能用吗?
  • 向关联企业捐赠现金500万元,假定按照税法规定
  • 应收账款未收到回函的替代程序
  • 销售煤炭增值税怎么算
  • 预交土地增值税怎么计算公式
  • 废料账务处理
  • 因产品不合格退回报废会计处理
  • 企业临时账户是什么意思
  • 海关增值税进项转出
  • 货币资金主要内容
  • 房地产开发公司怎么做账
  • 消费型增值税计算公式
  • 高新技术企业怎么申报企业所得税
  • 金税盘不交年费可以正常使用吗
  • macbook自带的游戏
  • 年底返利账务处理
  • 安装下载应用
  • 受托方代收代缴的消费税计入成本吗
  • win11多开
  • win11正式版问题
  • PHP:Memcached::addByKey()的用法_Memcached类
  • 无偿提供房屋使用 维修
  • 分配辅助生产成本时可能借记的科目有
  • 残疾人增值税即征即退政策2020
  • macOS Big Sur 11.2 公测版 beta 1怎么更新?
  • vue3.0解决跨域
  • 贴现会不会损害所有者权益
  • 蕾德纳斯
  • 研发费用加计扣除新税收政策2023
  • 最新版本金铲铲强势阵容
  • devtools vue
  • 前端必会
  • 基于Python的图书馆信息管理系统研发
  • 直接进入税金及附加的科目
  • 出售一台设备,收到价款20万
  • 收入调节方式有哪三种
  • 政府补助为什么是递延收益
  • 三栏式明细账需要每笔结余额吗
  • 报销人和收款人是一个人
  • 旅游费记入什么科目
  • 自然人个税申报密码怎么获取
  • 用友t3财务软件价格表
  • 商业承兑汇票的流程
  • 综合所得申报怎么补报上个月的
  • mysql基本查询
  • 资产处置收益的核算内容
  • 销售退回跨年度的会计分录
  • 长期应付款科目的涉税风险
  • 应付账款账面价值扣除商业折扣吗
  • 退多收的费用计入什么科目
  • 库存商品进项税额转出分录怎么写
  • 每个月计提工资没有发怎么办
  • 多缴纳了个税税率怎么办
  • 非流动资产增加意味什么
  • 毛利润利润总额净利润的关系图
  • sqlserver数据库和mysql区别
  • Navicat连接MySQL报错
  • 连接远程mq
  • windows8怎么用
  • win10预览版和正式版
  • linux块设备读写和回写
  • gzip: stdin: unexpected end of file tar: Unexpected EOF in archive tar: Unexpect
  • Linux通过netstat命令查看80端口连接数的方法
  • ExtJs事件机制基本代码模型和流程解析
  • nodejs入门教程
  • jquery设置自定义属性
  • 批处理文本文件如何建立
  • 新版unity
  • jquery绑定事件和移除事件
  • 手机关卡类游戏
  • jquery遍历li
  • 自定义水印相机
  • 软件和集成电路企业税收优惠
  • 物业收取水电费的通知范文
  • 河北公示信息网
  • 外地人在秦皇岛买房
  • 财税[2016]36号文营业税改征增值税试点实施办法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设