文章目录

  • 一、 概述
  • 二、 使用步骤
    • 2.1 步骤一:在Activity或Fragment布局文件中添加ViewPager2
    • 2.2 步骤二:创建ViewPager2每一个页面的视图Fragment
    • 2.3 步骤三:构建适配器(FragmentStateAdapter )
    • 2.4 步骤四:在Activity或Fragment中初始化设置ViewPager2
    • 2.5 步骤五(进阶):ViewPager2与BottomNavigationView组合实现底部导航栏滑动视图
  • 三、 参考资料
  • 四、 结束语

一、 概述

ViewPager2滑动视图允许您通过水平手指手势或滑动在同级屏幕(例如标签页)之间进行导航。此导航模式也称为“水平分页”。

二、 使用步骤

2.1 步骤一:在Activity或Fragment布局文件中添加ViewPager2

    <androidx.viewpager2.widget.ViewPager2android:id="@+id/viewPager2_main"android:layout_width="match_parent"android:layout_height="match_parent"/>

2.2 步骤二:创建ViewPager2每一个页面的视图Fragment

2.3 步骤三:构建适配器(FragmentStateAdapter )

package com.microdot.demo.adapter;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;import java.util.ArrayList;public class MainFragmentAdapter extends FragmentStateAdapter {private ArrayList<Fragment> mViewPager2FragmentArrayList = new ArrayList<androidx.fragment.app.Fragment>();public MainFragmentAdapter(@NonNull AppCompatActivity appCompatActivity,ArrayList<Fragment> viewPager2FragmentArrayList) {super(appCompatActivity);mViewPager2FragmentArrayList = viewPager2FragmentArrayList;}@NonNull@Overridepublic Fragment createFragment(int position) {return mViewPager2FragmentArrayList.get(position);}@Overridepublic int getItemCount() {return mViewPager2FragmentArrayList.size();}
}

2.4 步骤四:在Activity或Fragment中初始化设置ViewPager2

import com.microdot.demo.fragment.main.AddressBookFragment;
import com.microdot.demo.fragment.main.HomeFragment;
import com.microdot.demo.fragment.main.MessageFragment;
import com.microdot.demo.fragment.main.PersonalCenterFragment;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {// 声明ArrayList<Fragment>用于ViewPager2private ArrayList<Fragment> mViewPager2FragmentArrayList = new ArrayList<androidx.fragment.app.Fragment>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 使用binding视图绑定功能/** 通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。* 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。* */binding = ActivityMainBinding.inflate(getLayoutInflater());View view = binding.getRoot();setContentView(view);//1.构建①bottomnavigation与②mainactivity中的fragments的交互方式2:// 通过①bottomnavigation点击事件监听器(OnNavigationItemSelectedListener)与②ViewPager2与registerOnPageChangeCallback实现交互// 向ArrayList<Fragment>中添加元素mViewPager2FragmentArrayList.add(new HomeFragment());mViewPager2FragmentArrayList.add(new MessageFragment());mViewPager2FragmentArrayList.add(new AddressBookFragment());mViewPager2FragmentArrayList.add(new PersonalCenterFragment());// 为viewPager2Main设置Adapterbinding.viewPager2Main.setAdapter(new MainFragmentAdapter(this, mViewPager2FragmentArrayList));// viewPager2Main page默认设置为HomeFragmentbinding.viewPager2Main.setCurrentItem(0);}
}

本段代码中使用了视图绑定(binding)的功能,如想了解相关内容,请转至:
https://blog.csdn.net/weixin_44193930/article/details/121979673

2.5 步骤五(进阶):ViewPager2与BottomNavigationView组合实现底部导航栏滑动视图

import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.microdot.demo.R;
import com.microdot.demo.adapter.MainFragmentAdapter;
import com.microdot.demo.databinding.ActivityMainBinding;
import com.microdot.demo.fragment.main.AddressBookFragment;
import com.microdot.demo.fragment.main.HomeFragment;
import com.microdot.demo.fragment.main.MessageFragment;
import com.microdot.demo.fragment.main.PersonalCenterFragment;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {// 声明TAGprivate static final String TAG = "MainActivity";private static final String TAG_log_d = "MainActivity";// 声明接发消息的包裹对象private Bundle bundle_send_message = new Bundle(); // 声明一个发送消息的包裹对象private Bundle bundle_receive_message = new Bundle(); // 声明一个接收消息的包裹对象// 声明binding用于视图绑定功能private ActivityMainBinding binding;// 声明ArrayList<Fragment>用于ViewPager2private ArrayList<Fragment> mViewPager2FragmentArrayList = new ArrayList<androidx.fragment.app.Fragment>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 使用binding视图绑定功能/** 通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。* 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。* */binding = ActivityMainBinding.inflate(getLayoutInflater());View view = binding.getRoot();setContentView(view);//1.构建①bottomnavigation与②mainactivity中的fragments的交互方式2:// 通过①bottomnavigation点击事件监听器(OnNavigationItemSelectedListener)与②ViewPager2与registerOnPageChangeCallback实现交互// 向ArrayList<Fragment>中添加元素mViewPager2FragmentArrayList.add(new HomeFragment());mViewPager2FragmentArrayList.add(new MessageFragment());mViewPager2FragmentArrayList.add(new AddressBookFragment());mViewPager2FragmentArrayList.add(new PersonalCenterFragment());// 为viewPager2Main设置Adapterbinding.viewPager2Main.setAdapter(new MainFragmentAdapter(this, mViewPager2FragmentArrayList));// viewPager2Main page默认设置为HomeFragmentbinding.viewPager2Main.setCurrentItem(0);// 为viewPager2Main设置监听事件registerOnPageChangeCallback,onPageSelected,用于改变bottomNavigationViewMain的SelectedItembinding.viewPager2Main.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageSelected(int position) {super.onPageSelected(position);switch (position) {case 0:binding.bottomNavigationViewMain.setSelectedItemId(R.id.item_bottomnav_home);break;case 1:binding.bottomNavigationViewMain.setSelectedItemId(R.id.item_bottomnav_message);break;case 2:binding.bottomNavigationViewMain.setSelectedItemId(R.id.item_bottomnav_addressbook);break;case 3:binding.bottomNavigationViewMain.setSelectedItemId(R.id.item_bottomnav_personalCenter);break;default:break;}}});// 为bottomNavigationViewMain设置监听事件setOnNavigationItemSelectedListener,onNavigationItemSelected,用于改变viewPager2Main的CurrentItembinding.bottomNavigationViewMain.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {@SuppressLint("NonConstantResourceId")@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {switch (item.getItemId()) {case R.id.item_bottomnav_home:// 点击底部导航home选项的响应事件binding.viewPager2Main.setCurrentItem(0);return true;case R.id.item_bottomnav_message:// 点击底部导航message选项的响应事件binding.viewPager2Main.setCurrentItem(1);return true;case R.id.item_bottomnav_addressbook:// 点击底部导航addressbook选项的响应事件binding.viewPager2Main.setCurrentItem(2);return true;case R.id.item_bottomnav_personalCenter:// 点击底部导航personalCenter选项的响应事件binding.viewPager2Main.setCurrentItem(3);return true;default:break;}return false;}});}
}

本段代码中使用了底部导航栏(BottomNavigationView),如想了解相关内容,请转至:
https://blog.csdn.net/weixin_44193930/article/details/121977853


三、 参考资料

https://developer.android.google.cn/guide/navigation/navigation-swipe-view-2


四、 结束语

本文档为博主自主学习Android应用开发过程中的经验总结与心得体会,希望能在读者的学习道路上帮上一点点小忙,共同学习,共同成长。
欢迎读者评论留言,点赞,收藏,分享!


导航组件—Android应用中使用ViewPager2创建滑动视图相关推荐

  1. 导航组件—Android应用中使用导航图

    文章目录 一. 概述 1.1 导航的概念 1.2 导航的组成 1.3 导航的优势 二. 使用步骤 2.1 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中添加依赖 ...

  2. Android Studio中模拟器的创建

    Android Studio中模拟器的创建 针对Android Studio没有勾选模拟器的下载或者是下载失败的情况的模拟器的创建过程 第一步:点击"Create device"创 ...

  3. 动态头像 Android 实现,Android开发中实现一个头像滑动变大变小功能

    Android开发中实现一个头像滑动变大变小功能 发布时间:2020-11-21 16:36:20 来源:亿速云 阅读:74 作者:Leah 这篇文章给大家介绍Android开发中实现一个头像滑动变大 ...

  4. android addview指定位置,Android开发中,请问当在一个视图中addView另一个布局视图时为什么报错?...

    Android开发中,我在一个视图中addView另一个布局视图(该视图通过inflate加载获得,其中root为null即没有附加parent视图),为什么还是会报错误: The specified ...

  5. iOS中的UIScrollView(滑动视图)

    2019独角兽企业重金招聘Python工程师标准>>> UIScrollView  可以滑动的视图 #import "ViewController.h"@inte ...

  6. Android系统中的进程管理:进程的创建

    对于操作系统来说,进程管理是其最重要的职责之一. 考虑到这部分的内容较多,因此会拆分成几篇文章来讲解. 本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建. 本文适合Android平 ...

  7. Android系统中的进程管理:内存的回收

    本文是Android系统进程管理的第三篇文章.进程管理的前面两篇文章,请参见这里: Android系统中的进程管理:进程的创建 Android系统中的进程管理:进程的优先级 本文适合Android平台 ...

  8. Android数据存储:数据库基础,在Android应用中使用数据库,附加Menu菜单选项的一些说明

    为什么**持久性数据很重要: 在计分器那个应用中,是将球队得分存储在变量里,当我们旋转应用时Activity被销毁,得分记录也没有了.将设备旋转为新的方向时,Activity被重现创建,得分又变成默认 ...

  9. android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...

    在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android- ...

最新文章

  1. Oracle SQL Tuning Advisor 测试
  2. phpcms的安装以及简单使用
  3. Qt QSetting *.ini.lock
  4. 转:Linux--进程间通信(信号量,共享内存)
  5. hashmap为什么线程不安全_StringBuilder为什么线程不安全?
  6. pwm一个时间单位_通过PWM进行数模转换的滤波电路分析计算
  7. 60 岁的人工智能,会是“人类历史最后的事件”吗?
  8. linux 嵌入式 人工智能,嵌入式人工智能有哪些相关技术
  9. springboot13 页面国际化(i18n)
  10. 常用遥感数据下载地址
  11. Windows下安装 rubyinstaller
  12. 地理空间搜索 ->R树索引
  13. word 电子签名去背景方法
  14. CentOS8桌面图标不显示
  15. 免费建立个人网站怎么做?教你简单的方法
  16. 求助华为HG8321R光猫这样还有救吗
  17. java生成大小写字母加数字的随机数
  18. 软件控制硬件c语言编程,硬件编程用什么软件好
  19. C语言学习笔记(九)
  20. CVPR 2019 Oral 论文精选汇总,值得一看的 CV 论文都在这里(持续更新中)

热门文章

  1. AndroidStudio删除无用资源
  2. 电脑关机word文件未保存的解决办法
  3. mac完全卸载LV security Agent 安装助手客户端
  4. 智能卡简介、分类以及程序开发用到的协议
  5. 公众号1200篇文章分类和索引
  6. 如何清空微信浏览器缓存
  7. Python列表元素个数的加权和
  8. 虚拟三维及游戏引擎制作软件
  9. day025 JavaScript第二天
  10. 皮肤控件 IrisSkin4.dll / IrisSkin2.dll的下载及调用样例