安卓实现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安全是一个大课…

【全开源】简单商城系统(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编程从入门到实践》day37

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

时光初创知识付费模板 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…

docker和containerd的区别

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

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

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

Steam致富:玩免费游戏Banana获得可交易道具

最近&#xff0c;Steam平台上一款普普通通的免费游戏《Banana》引起了轰动&#xff0c;接近2万人同时在线&#xff0c;好评率高达94&#xff05;&#xff0c;究竟是什么让这款游戏如此受欢迎呢&#xff1f;原来&#xff0c;玩家们都在争相获取稀有的香蕉。 《Banana》属于点击放…

C++初阶学习第十弹——探索STL奥秘(五)——深入讲解vector的迭代器失效问题

vector&#xff08;上&#xff09;&#xff1a;C初阶学习第八弹——探索STL奥秘&#xff08;三&#xff09;——深入刨析vector的使用-CSDN博客 vector&#xff08;中&#xff09;&#xff1a;C初阶学习第九弹——探索STL奥秘&#xff08;四&#xff09;——vector的深层挖掘和…

反序列化漏洞(JBoss、apache log4、apache Shiro、JWT)Weblogic未授权访问、代码执行、任意上传

1.1什么是反序列化 就是把一个对象变成可以传输的字符串&#xff0c;目的就是为了方便传输。假设&#xff0c;我们写了一个class&#xff0c;这个class里面存有一些变量。当这个class被实例化了之后&#xff0c;在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到…

CentOS-9配置静态IP地址

查看配置命令nmcli CentOS 9 使用 nmcli 命令行工具进行网络配置。以下是配置静态 IP 地址的步骤和示例代码&#xff1a;相对以前centos7之类的&#xff0c;9版本的默认的网络是NetworkManager&#xff0c;网络配置也有较大改变 nmcli con show用vim进行编辑配文件 cd /etc/…

JavaScript基础(九)

冒泡排序 用例子比较好理解: var arry[7,2,6,3,4,1,8]; //拿出第一位数7和后面依次比较&#xff0c;遇到大的8就换位&#xff0c;8再与后面依次比较&#xff0c;没有能和8换位的数&#xff0c;再从下一位2依次与下面的数比较。 console.log(排列之前&#xff1a;arry); for (…

开源大模型与闭源大模型:技术哲学的较量

目录 前言一、 开源大模型的优势1. 社区支持与合作1.1 全球协作网络1.2 快速迭代与创新1.3 共享最佳实践 2. 透明性与可信赖性2.1 审计与验证2.2 减少偏见与错误2.3 安全性提升 3. 低成本与易访问性3.1 降低研发成本3.2 易于定制化3.3 教育资源丰富 4. 促进标准化5. 推动技术进…

自养号测评是什么?亚马逊产品评价的全新策略

1、什么是亚马逊测评&#xff1a; 亚马逊测评&#xff0c;简而言之&#xff0c;是基于亚马逊购物平台的一种特定活动。他的核心在于模拟国外消费者的购物行为&#xff0c;并在完成购买后&#xff0c;对所获得的产品进行真实、中肯的评价。这种测评不仅为消费者提供了购物参考&…

微软开发者大会,Copilot Agents发布,掀起新一轮生产力革命!

把AI融入生产力工具的未来会是什么样&#xff1f;微软今天给出了蓝图。 今天凌晨&#xff0c;微软召开了Microsoft Build 2024 开发者大会&#xff0c;同前两天的Google I/O开发者大会一样&#xff0c;本次大会的核心词还是“AI”&#xff0c;其中最主要的内容是最新的Copilot…

成都爱尔胡建斌院长提醒近视超过600度,记得每年检查眼底!

高度近视是指近视度数在600度及以上的一种屈光不正的状态。 近视的眼睛必定是变形的。在正常情况下&#xff0c;人的眼球类似球体&#xff0c;但随着近视加深&#xff0c;眼轴变长&#xff0c;眼球体积逐渐增大&#xff0c;整个眼球从圆球型向椭圆球形发展&#xff0c;而眼球壁…

Linux:top命令的每一列的具体含义

Linux&#xff1a;top命令的每一列的具体含义 文章目录 Linux&#xff1a;top命令的每一列的具体含义图片显示top命令的概念语法显示字段的含义顶部字段第二行第三行第四行第五行每列字段的含义 图片显示 top命令的概念 top命令上一个常用的Linux命令行工具&#xff0c;用于实…