安卓实现5个底部导航栏切换fragment

步骤,写 5 个 fragment 自定义的类+5个布局文件:
 

package com.xmkjsoft.xhgh.fragment;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.xmkjsoft.xhgh.R;public class CartFragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_cart, container, false);}
}package com.xmkjsoft.xhgh.fragment;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.xmkjsoft.xhgh.R;public class HomeFragment  extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_home, container, false);}
}package com.xmkjsoft.xhgh.fragment;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.xmkjsoft.xhgh.R;public class MineFragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_mine, container, false);}
}package com.xmkjsoft.xhgh.fragment;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.xmkjsoft.xhgh.R;public class SortFragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_sort, container, false);}
}package com.xmkjsoft.xhgh.fragment;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import com.xmkjsoft.xhgh.R;public class VideoFragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_video, container, false);}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"><Buttonandroid:id="@+id/center_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="fragment_cart"android:textSize="18sp"android:textStyle="bold"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

MainActivity 和布局文件

package com.xmkjsoft.xhgh;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;import com.google.android.material.badge.BadgeDrawable;
import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.bottomnavigation.LabelVisibilityMode;
import com.google.android.material.navigation.NavigationBarView;
import com.xmkjsoft.xhgh.fragment.CartFragment;
import com.xmkjsoft.xhgh.fragment.HomeFragment;
import com.xmkjsoft.xhgh.fragment.MineFragment;
import com.xmkjsoft.xhgh.fragment.SortFragment;
import com.xmkjsoft.xhgh.fragment.VideoFragment;public class MainActivity extends AppCompatActivity {private BottomNavigationView bottomNavigationView;private FragmentManager fragmentManager;private HomeFragment homeFragment;private VideoFragment videoFragment;private SortFragment sortFragment;private CartFragment cartFragment;private MineFragment mineFragment;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bottomNavigationView = findViewById(R.id.bottom_navigation);// 获取或创建相应菜单项的 BadgeBadgeDrawable badge = bottomNavigationView.getOrCreateBadge(R.id.home);bottomNavigationView.setLabelVisibilityMode(NavigationBarView.LABEL_VISIBILITY_LABELED);// 设置红点的颜色为红色badge.setBackgroundColor(ContextCompat.getColor(this, R.color.badge_color));// 设置 Badge 上显示的数字badge.setNumber(999);bottomNavigationView.setOnItemSelectedListener(new BottomNavigationView.OnItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {if (item.getItemId() == R.id.home) {// 处理 Home 子项点击事件return false;} else if (item.getItemId() == R.id.video) {// 处理 Video 子项点击事件return true;} else if (item.getItemId() == R.id.sort) {// 处理 Sort 子项点击事件return true;} else if (item.getItemId() == R.id.cart) {// 处理 Cart 子项点击事件return true;} else if (item.getItemId() == R.id.mine) {// 处理 Mine 子项点击事件return true;} else {return false;}}});/**禁止长按弹出toast**/BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);for (int i = 0; i < menuView.getChildCount(); i++) {final View view = menuView.getChildAt(i);view.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {// 返回true表示消费了长按事件,不再执行默认的长按行为view.performClick(); // 模拟点击事件return true;}});}homeFragment=new HomeFragment();videoFragment=new VideoFragment();sortFragment=new SortFragment();cartFragment=new CartFragment();mineFragment=new MineFragment();fragmentManager = getSupportFragmentManager();// 默认显示 exampleFragmentfragmentManager.beginTransaction().replace(R.id.home_container, homeFragment).commit();// 设置底部导航栏的监听器bottomNavigationView.setOnItemSelectedListener(new BottomNavigationView.OnItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();if (item.getItemId() == R.id.home) {Fragment fragment2 = fragmentManager.findFragmentById(R.id.video_container);Fragment fragment3 = fragmentManager.findFragmentById(R.id.sort_container);Fragment fragment4 = fragmentManager.findFragmentById(R.id.cart_container);Fragment fragment5 = fragmentManager.findFragmentById(R.id.mine_container);if (fragment2 != null) {fragmentTransaction.remove(fragment2);}if (fragment3 != null) {fragmentTransaction.remove(fragment3);}if (fragment4 != null) {fragmentTransaction.remove(fragment4);}if (fragment5 != null) {fragmentTransaction.remove(fragment5);}// 替换为 fragment1fragmentTransaction.replace(R.id.home_container, homeFragment);fragmentTransaction.commit();return true;}else if (item.getItemId() == R.id.video) {Fragment fragment1 = fragmentManager.findFragmentById(R.id.home_container);Fragment fragment3 = fragmentManager.findFragmentById(R.id.sort_container);Fragment fragment4 = fragmentManager.findFragmentById(R.id.cart_container);Fragment fragment5 = fragmentManager.findFragmentById(R.id.mine_container);if (fragment1 != null) {fragmentTransaction.remove(fragment1);}if (fragment3 != null) {fragmentTransaction.remove(fragment3);}if (fragment4 != null) {fragmentTransaction.remove(fragment4);}if (fragment5 != null) {fragmentTransaction.remove(fragment5);}// 替换为 fragment1fragmentTransaction.replace(R.id.video_container,videoFragment);fragmentTransaction.commit();return true;}else if (item.getItemId() == R.id.sort) {Fragment fragment1 = fragmentManager.findFragmentById(R.id.home_container);Fragment fragment2 = fragmentManager.findFragmentById(R.id.video_container);Fragment fragment4 = fragmentManager.findFragmentById(R.id.cart_container);Fragment fragment5 = fragmentManager.findFragmentById(R.id.mine_container);if (fragment1 != null) {fragmentTransaction.remove(fragment1);}if (fragment2 != null) {fragmentTransaction.remove(fragment2);}if (fragment4 != null) {fragmentTransaction.remove(fragment4);}if (fragment5 != null) {fragmentTransaction.remove(fragment5);}// 替换为 fragment1fragmentTransaction.replace(R.id.sort_container,sortFragment);fragmentTransaction.commit();return true;}else if (item.getItemId() == R.id.cart) {Fragment fragment1 = fragmentManager.findFragmentById(R.id.home_container);Fragment fragment2 = fragmentManager.findFragmentById(R.id.video_container);Fragment fragment3 = fragmentManager.findFragmentById(R.id.sort_container);Fragment fragment5 = fragmentManager.findFragmentById(R.id.mine_container);if (fragment1 != null) {fragmentTransaction.remove(fragment1);}if (fragment2 != null) {fragmentTransaction.remove(fragment2);}if (fragment3 != null) {fragmentTransaction.remove(fragment3);}if (fragment5 != null) {fragmentTransaction.remove(fragment5);}fragmentTransaction.replace(R.id.cart_container,cartFragment);fragmentTransaction.commit();return true;}else if (item.getItemId() == R.id.mine) {Fragment fragment1 = fragmentManager.findFragmentById(R.id.home_container);Fragment fragment2 = fragmentManager.findFragmentById(R.id.video_container);Fragment fragment3 = fragmentManager.findFragmentById(R.id.sort_container);Fragment fragment4 = fragmentManager.findFragmentById(R.id.cart_container);if (fragment1 != null) {fragmentTransaction.remove(fragment1);}if (fragment2 != null) {fragmentTransaction.remove(fragment2);}if (fragment3 != null) {fragmentTransaction.remove(fragment3);}if (fragment4 != null) {fragmentTransaction.remove(fragment4);}fragmentTransaction.replace(R.id.mine_container,mineFragment);fragmentTransaction.commit();return true;}return false;}});}
}

布局文件

<?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"><com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/bottom_navigation"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"app:layout_constraintBottom_toBottomOf="parent"app:itemRippleColor="@null"app:labelVisibilityMode="labeled"app:menu="@menu/bottom_navigation_menu" /><FrameLayoutandroid:id="@+id/home_container"android:layout_width="match_parent"android:layout_height="match_parent" /><FrameLayoutandroid:id="@+id/video_container"android:layout_width="match_parent"android:layout_height="match_parent" /><FrameLayoutandroid:id="@+id/sort_container"android:layout_width="match_parent"android:layout_height="match_parent" /><FrameLayoutandroid:id="@+id/cart_container"android:layout_width="match_parent"android:layout_height="match_parent" /><FrameLayoutandroid:id="@+id/mine_container"android:layout_width="match_parent"android:layout_height="match_parent" /></androidx.constraintlayout.widget.ConstraintLayout>

menu文件 5个tab嘛:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/home"android:icon="@drawable/ic_launcher_background"android:title="@string/nav_home_text" /><itemandroid:id="@+id/video"android:icon="@drawable/ic_launcher_background"android:title="@string/nav_video_text" /><itemandroid:id="@+id/sort"android:icon="@drawable/ic_launcher_background"android:title="@string/nav_sort_text" /><itemandroid:id="@+id/cart"android:icon="@drawable/ic_launcher_background"android:title="@string/nav_cart_text" /><itemandroid:id="@+id/mine"android:icon="@drawable/ic_launcher_background"android:title="@string/nav_mine_text" />
</menu>

string:

<resources><string name="app_name">xhgh</string><string name="nav_home_text">首页</string><string name="nav_video_text">小视频</string><string name="nav_sort_text">分类</string><string name="nav_cart_text">购物车</string><string name="nav_mine_text">我的</string>
</resources>

/**禁止长按弹出toast**/
BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);

for (int i = 0; i < menuView.getChildCount(); i++) {
    final View view = menuView.getChildAt(i);
    view.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            // 返回true表示消费了长按事件,不再执行默认的长按行为

view.performClick(); // 模拟点击事件

            return true;
        }
    });
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win11安装docker运行Open-Webui 界面化展示 ollama大模型

1.OpenWeb UI运行需要docker 环境下载docker Get Started | Docker 2.需要命令提示符docker -v 查询是否安装成功&#xff1b; 查询docker详情docker version 3.github拉取open-webUi镜像Package open-webui GitHub 复制命令运行在命令提示符&#xff1b; 等待下载完成 4.到…

Web安全:企业如何抵御常见的网络攻击?

近年来随着人类社会向数字世界的加速发展&#xff0c;勒索软件攻击事件在全球范围内呈现快速上升的态势&#xff0c;几乎所有国家的政府、金融、教育、医疗、制造、交通、能源等行业均受到影响&#xff0c;可以说有互联网的地方就可能发生勒索软件攻击事件。 Web安全是一个大课…

蓝桥杯2023(十四届)省赛——统计日期(八重神子)

统计日期 2.日期统计 - 蓝桥云课 (lanqiao.cn) 其实一开始我想直接暴力的&#xff0c;然后写着写着突然觉得可以优化一下&#xff1a; 优化方法&#xff1a;先找所有2023的位置&#xff0c;记录初始和最后的位置 找出所有合法日期的位置&#xff0c;使用前缀和&#xff0c;计…

C语言基础-静态变量(static)

在C语言中&#xff0c;static关键字有多种用途&#xff0c;主要与变量的存储期&#xff08;lifetime&#xff09;和可见性&#xff08;visibility&#xff09;有关。以下是static在C语言中的主要用途&#xff1a; 局部静态变量&#xff1a; 在函数内部定义的局部静态变量&#…

2024-05-24 思考-关于软件架构设计

摘要: 2024-05-24 思考-关于软件架构设计 软件架构设计: 虽然在商业的战略中&#xff0c;软件代码只是起到最后的一个环节&#xff0c;但是对于业务本身来说&#xff0c;还是应该站在商业的视角上&#xff0c;去看待技术的实现此前读过的比较有价值的关于软件架构设计的书&…

【全开源】简单商城系统(PC/UniAPP)

轻松构建您的在线商店 在当今数字化时代&#xff0c;拥有一个在线商店对于许多商家来说已成为必不可少的营销手段。为了满足这一需求&#xff0c;我们推出了“简单商城系统源码”&#xff0c;让您轻松构建并管理您的在线商店。 一、简单易用&#xff0c;快速上手 “简单商城…

C++第三方库【JSON】— jsoncpp

目录 认识JSON jsoncpp库 安装&使用 认识jsoncpp Json::Value jsoncpp序列化 jsoncpp反序列化 认识JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据&#xff0c;常用于在客户端和服…

《QT实用小工具·六十五》基于QPropertyAnimation实现的移动动画和控件覆盖

1、概述 源码放在文章末尾 该项目基于QPropertyAnimation实现了控件平移动画和控件之间的相互覆盖效果&#xff0c;项目demo演示如下所示&#xff1a; 项目解析&#xff1a; new QPropertyAnimation(ui.SingleOcclusion, “pos”); //创建动画对象&#xff0c;第一个参数传…

用python做的一个井子棋游戏——浔川python社

简介&#xff1a; 在井子棋的基础上&#xff0c;我们改进了登录界面。允许大量玩家注册! # -*- coding: utf-8 -*- import tkinter as tk import tkinter.messagebox import pickle import random# 窗口 window tk.Tk() window.title(欢迎进入python) window.geometry(450x2…

《Python编程从入门到实践》day37

# 昨日知识点回顾 制定规范、创建虚拟环境并激活&#xff0c;正在虚拟环境创建项目、数据库和应用程序 # 今日知识点学习 18.2.4 定义模型Entry # models.py from django.db import models# Create your models here. class Topic(models.Model):"""用户学习的…

TypeScript中的类型推断(Type Inference):自动化的类型安全

TypeScript中的类型推断&#xff08;Type Inference&#xff09;&#xff1a;自动化的类型安全 引言 类型推断是TypeScript的一个关键特性&#xff0c;它允许编译器根据值的初始化或上下文自动推导出变量的类型。这减少了需要显式指定的类型注解&#xff0c;同时保持了代码的…

springboot中不同请求方式的注解有哪些,有什么含义

在Spring Boot中&#xff0c;处理Web请求通常使用Spring MVC框架&#xff0c;它提供了一系列的注解来支持不同的HTTP请求方式。以下是一些常用的注解及其含义&#xff1a; RequestMapping: 这是一个通用的映射注解&#xff0c;可以用于映射类或方法到HTTP请求。它支持多种请求方…

Python进阶之深入类和对象

鸭子类型 鸭子类型实际上类似于多态的概念。指的是我们在使用一个父类的时候&#xff0c;不关心子类具体是什么&#xff0c;只要之类实现了父类必须要要实现的方法&#xff0c;我们就把它当成父类使用。 在下面的案例中&#xff0c;鸭子&#xff0c;猫&#xff0c;狗都是动物…

webgl three 几何体

辅助几何体 // AxesHelper&#xff1a;辅助观察的坐标系const axesHelper new THREE.AxesHelper(400);scene.add(axesHelper);//辅助观察网格const gridHelper new THREE.GridHelper(300, 25, 0x004444, 0x004444);scene.add(gridHelper); 基础几何体 //长方体const geomet…

时光初创知识付费模板 3.6.4 安装包 附教程

源码地址&#xff1a; https://wwv.lanzouh.com/b080wj8eh

码蹄集部分题目(2024OJ赛15期;前缀和+栈+堆+队列)

1&#x1f40b;&#x1f40b;&#x1f40b;门票&#xff08;钻石&#xff1b;前缀和&#xff09; 时间限制&#xff1a;1秒 占用内存&#xff1a;128M &#x1f41f;题目描述 &#x1f41f;输入输出格式 &#x1f41f;样例 &#x1f41a;样例 &#x1f41a;备注 &#x1f4…

西北农林科技大学2024学年C++面向对象程序设计OJ——T15 英文文本单词统计(STL)

一.题目描述 Description 读入一篇英文文章&#xff0c;基于STL中的容器和算法&#xff08;建议包含<map>、<algorithm>、<string>和<sstream>&#xff09;&#xff0c;删除所有标点符号&#xff0c;主要包括英文逗号“,”、句号“.”、分号“;”、感…

docker和containerd的区别

docker和containerd的区别 1、容器运行时 1.1 容器运行时概念 容器运行时&#xff08;Container Runtime&#xff09;是一种负责在操作系统层面创建和管理容器的软件工具或组件。它是容器化技术的核心组件之一&#xff0c;用于在容器内部运行应用程序&#xff0c;并提供隔离…

Linux 三十六章

​​​​​​​ &#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要…

ORACLE 资源管理参数与等待事件resmgr:cpu quantum

RESOURCE_MANAGER_PLAN 先来看下参数的含义 官网链接&#xff1a;RESOURCE_MANAGER_PLAN (oracle.com) 意思翻译过来这个参数用于资源计划。后边的看完也不是很明白具体的作用 于是参考了以下文章 Oracle 参数 RESOURCE_MANAGER_PLAN 官方解释&#xff0c;作用&#xff0c;…