导航组件—Android应用中使用ViewPager2创建滑动视图
文章目录
- 一、 概述
- 二、 使用步骤
- 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创建滑动视图相关推荐
- 导航组件—Android应用中使用导航图
文章目录 一. 概述 1.1 导航的概念 1.2 导航的组成 1.3 导航的优势 二. 使用步骤 2.1 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中添加依赖 ...
- Android Studio中模拟器的创建
Android Studio中模拟器的创建 针对Android Studio没有勾选模拟器的下载或者是下载失败的情况的模拟器的创建过程 第一步:点击"Create device"创 ...
- 动态头像 Android 实现,Android开发中实现一个头像滑动变大变小功能
Android开发中实现一个头像滑动变大变小功能 发布时间:2020-11-21 16:36:20 来源:亿速云 阅读:74 作者:Leah 这篇文章给大家介绍Android开发中实现一个头像滑动变大 ...
- android addview指定位置,Android开发中,请问当在一个视图中addView另一个布局视图时为什么报错?...
Android开发中,我在一个视图中addView另一个布局视图(该视图通过inflate加载获得,其中root为null即没有附加parent视图),为什么还是会报错误: The specified ...
- iOS中的UIScrollView(滑动视图)
2019独角兽企业重金招聘Python工程师标准>>> UIScrollView 可以滑动的视图 #import "ViewController.h"@inte ...
- Android系统中的进程管理:进程的创建
对于操作系统来说,进程管理是其最重要的职责之一. 考虑到这部分的内容较多,因此会拆分成几篇文章来讲解. 本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建. 本文适合Android平 ...
- Android系统中的进程管理:内存的回收
本文是Android系统进程管理的第三篇文章.进程管理的前面两篇文章,请参见这里: Android系统中的进程管理:进程的创建 Android系统中的进程管理:进程的优先级 本文适合Android平台 ...
- Android数据存储:数据库基础,在Android应用中使用数据库,附加Menu菜单选项的一些说明
为什么**持久性数据很重要: 在计分器那个应用中,是将球队得分存储在变量里,当我们旋转应用时Activity被销毁,得分记录也没有了.将设备旋转为新的方向时,Activity被重现创建,得分又变成默认 ...
- android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...
在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android- ...
最新文章
- Oracle SQL Tuning Advisor 测试
- phpcms的安装以及简单使用
- Qt QSetting *.ini.lock
- 转:Linux--进程间通信(信号量,共享内存)
- hashmap为什么线程不安全_StringBuilder为什么线程不安全?
- pwm一个时间单位_通过PWM进行数模转换的滤波电路分析计算
- 60 岁的人工智能,会是“人类历史最后的事件”吗?
- linux 嵌入式 人工智能,嵌入式人工智能有哪些相关技术
- springboot13 页面国际化(i18n)
- 常用遥感数据下载地址
- Windows下安装 rubyinstaller
- 地理空间搜索 ->R树索引
- word 电子签名去背景方法
- CentOS8桌面图标不显示
- 免费建立个人网站怎么做?教你简单的方法
- 求助华为HG8321R光猫这样还有救吗
- java生成大小写字母加数字的随机数
- 软件控制硬件c语言编程,硬件编程用什么软件好
- C语言学习笔记(九)
- CVPR 2019 Oral 论文精选汇总,值得一看的 CV 论文都在这里(持续更新中)