保姆级手把手记录Android studio BottomNavigationView +FrameLayout暴力切换Fragment

开发环境:

效果图:

《《《代码在底部》》》

1,新建项目

2,新建若干Fragment,内容一样,改一下显示出来的Text,名字分别为test1Fragment,test2Fragment,test3Fragment,默认TextView的Text属性分别设置为Fragment1内容,Fragment2内容,Fragment3内容,以示区分

3,拖拽一个FrameLayout

4,拖拽一个BottomNavigationView

5,调整代码

6,新建一个菜单资源给BottomNavigationView使用

7,BottomNavigationView和新建的菜单项关联

8,进一步调整代码

9,MainActivity中的代码

10,红色部分导入类即可解决

代码如下:

1,nav_menu.xml

复制代码
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigation_home"
        android:icon="@android:drawable/ic_dialog_map"
        android:title="Frame1" />
    <item
        android:id="@+id/navigation_tools"
        android:icon="@android:drawable/ic_menu_compass"
        android:title="Frame2" />
    <item
        android:id="@+id/navigation_play"
        android:icon="@android:drawable/ic_menu_gallery"
        android:title="Frame3" />
</menu>

2,activity_main.xml

复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:ignore="ExtraText">


    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/nav_menu"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:menu="@menu/nav_menu"
        tools:layout_height="50dp" />


</RelativeLayout>

3,fragment_test1.xml

复制代码
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
    tools:context=".test1Fragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:id="@+id/text1Fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Fragment1内容" />

</FrameLayout>

4,MainActivity.java

复制代码
package com.example.bottomnavigationviewstudy;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

import android.os.Bundle;
import android.view.MenuItem;

import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationBarView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ArrayList<Fragment> mFragments = new ArrayList<Fragment>();
    test1Fragment t1f = new test1Fragment();
    test2Fragment t2f = new test2Fragment();
    test3Fragment t3f = new test3Fragment();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomNavigationView navView = findViewById(R.id.nav_menu);
        mFragments.add(t1f);
        mFragments.add(t2f);
        mFragments.add(t3f);

        //设置默认加载视图
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new test1Fragment()).commit();

        // navView 点击事件
        navView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                String a = (String) item.getTitle();

                //判断是哪个item被点击了
                switch (a) {

                    case "Frame2":
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new test2Fragment()).commit();
                        break;
                    case "Frame3":
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new test3Fragment()).commit();
                        break;
                    default:
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new test1Fragment()).commit();
                        break;
                }
                item.setChecked(true);
                return true;
            }
        });
    }
}
相关推荐
TimeFine44 分钟前
AI 编码工作流的设计(二)
android·ai编程
2401_881828321 小时前
MySQL操作命令
android·mysql·adb
用户60709759149062 小时前
AOSP 14 OTA 升级指导(三):三条升级链路——Java API、自研 HAL 与 TR069
android
前端小D3 小时前
React Native Android 项目搭建
android·react native·react.js
恋猫de小郭4 小时前
感人,Flutter 居然有了一个超实用提案,期待落地
android·前端·flutter
2501_915909064 小时前
Windows 打开 Xcode 工程,编译调试 Xcode 项目并和 Mac 同事协作
ide·windows·vscode·macos·ios·个人开发·xcode
CS_Zero5 小时前
安卓开发:Linux的android工具命令
android·linux·运维
golang学习记5 小时前
比VS Code轻10倍,JetBrains开源全新AI IDE
ide·人工智能·jetbrains·thinkrail
fellow995 小时前
DSH Desktop - Android Edition
android·agent·deepseek·harness·dsh
Carson带你学Android5 小时前
Android Studio Rabbit 2 发布:除了Gemini,40+ AI Agent 正式入驻!
android·ai编程