Navigation不跳转问题解决

news/2024/5/17 19:36:52 标签: gitee

今天用到Navigation来控制fragmnet导航,遇到了一个情况,bottomNavigationView.setupWithNavController(control)和菜单绑定后,菜单点击无效果,页面不能跳转;

代码很简单:

依赖版本:

androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version = "2.5.3" }
androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version = "2.5.3" }

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/nav_host_fragment_content_main"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/navigation_graph"
        />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        app:menu="@menu/navigation_menu"/>
</LinearLayout>

activity代码:

package com.example.mynavigation

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import androidx.navigation.Navigation
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.bottomnavigation.BottomNavigationView

class MainActivity : AppCompatActivity() {
    private lateinit var bottomNavigationView: BottomNavigationView;
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        if(!::bottomNavigationView.isInitialized){
            bottomNavigationView = findViewById(R.id.nav_view)
        }
        var control = findNavController(R.id.nav_host_fragment_content_main)
        //val appBarConfiguration = AppBarConfiguration(
        //    setOf(
        //        R.id.fragment_first, R.id.fragment_second, R.id.fragment_third
        //    )
        //)
        //setupActionBarWithNavController(control, appBarConfiguration)
        //NavigationUI.setupActionBarWithNavController(this, navController, configuration)
        //bottomNavigationView.setupWithNavController(control)
        NavigationUI.setupWithNavController(bottomNavigationView,control)
    }

}

后经排查,发现问题出在了res/menu/navigation_menu和res/navigation/navigation_graph对应关系上面

想要有联动,这两个配置文件的id要一一对应:android:id="@+id/fragment_first"、android:id="@+id/fragment_second"、android:id="@+id/fragment_third"

res/menu/navigation_menu:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/fragment_first"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="fragment1cc" />
    <item
        android:id="@+id/fragment_second"
        android:icon="@drawable/ic_dashboard_black_24dp"
        android:title="fragment2bb" />
    <item
        android:id="@+id/fragment_third"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:title="fragment3ss" />
</menu>

res/navigation/navigation_graph

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/navigation_graph"
    app:startDestination="@id/fragment_first">
    <fragment
        android:id="@+id/fragment_first"
        android:name="com.example.mynavigation.Fragment1"
        android:label="fragment1">

<!--        <action-->
<!--            android:id="@+id/action_fragment_first_to_fragment_second"-->
<!--            app:destination="@id/fragment_second" />-->
    </fragment>
    <fragment
        android:id="@+id/fragment_second"
        android:name="com.example.mynavigation.Fragment2"
        android:label="fragment2">

<!--        <action-->
<!--            android:id="@+id/action_fragment_second_to_fragment_third"-->
<!--            app:destination="@id/fragment_third"/>-->
    </fragment>
    <fragment
        android:id="@+id/fragment_third"
        android:name="com.example.mynavigation.Fragment3"
        android:label="fragment3" />


</navigation>

http://www.niftyadmin.cn/n/5346176.html

相关文章

shallowRef与shallowReactive

shallowRef&#xff1a;浅层响应->整体重新赋新值才会触发更新&#xff0c;只改变单个属性不会触发更新 shallowReactive&#xff1a;浅层响应->第一层属性变化会触发更新&#xff0c;不是第一层属性不会触发更新 <template><div><h2>{{ person }}&l…

腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…

【C++进阶】STL容器--list使用迭代器问题分析

目录 前言 1. list的基本使用 1.1 list构造函数 1.2 list迭代器 1.3 list capacity 1.4 list元素访问 1.5 list 修改操作 insert erase swap resize clear 2. list失效迭代器问题 3. list使用算法库函数问题 总结 前言 list&#xff08;链表&#xff09;在C中非常重要…

Flink State backend状态后端

概述 Flink在v1.12到v1.14的改进当中,其状态后端也发生了变化。老版本的状态后端有三个,分别是MemoryStateBackend、FsStateBackend、RocksDBStateBackend,在flink1.14中,这些状态已经被废弃了,新版本的状态后端是 HashMapStateBackend、EmbeddedRocksDBStateBackend。 …

科技赋能智慧水利——山海鲸软件水利方案解析

作为山海鲸可视化软件的开发者&#xff0c;我们深感荣幸能为我国智慧水利建设提供强大助力。作为钻研数字孪生领域的开创者&#xff0c;我们希望不仅能为大家带来免费好用&#xff0c;人人都能用起来的数字孪生产品&#xff0c;还希望以其独特的技术优势和创新设计理念&#xf…

Ubuntu 18.04 x86_64 上交叉编译 boost 库(ARMv7L)

先安装 ARMv7L 交叉编译器环境&#xff1a; 在 Ubuntu 18.04 x86_64 上面安装 Linux-ARMv7 A/L GCC编译器-CSDN博客 1、下载 boost 1.84 的源代码访问要编译的目录&#xff0c;并且解压出来源代码&#xff0c;切入源代码根目录 2、./bootstrap.sh --with-librariesfilesyste…

一文深度解读多模态大模型视频检索技术的实现与使用

当视频检索叠上大模型Buff。 万乐乐&#xff5c;技术作者 视频检索&#xff0c;俗称“找片儿”&#xff0c;即通过输入一段文本&#xff0c;找出最符合该文本描述的视频。 随着视频社会化趋势以及各类视频平台的快速兴起与发展&#xff0c;「视频检索」越来越成为用户和视频平…

php怎么输入一个变量,http常用的两种请求方式getpost(ctf基础)

php是网页脚本语言&#xff0c;网页一般支持两种提交变量的方式&#xff0c;即get和post get方式传参 直接在网页URL的后面写上【?a1027】&#xff0c;如果有多个参数则用&符号连接&#xff0c; 如【?a10&b27】 post方式传参 需要借助插件&#xff0c;ctfer必备插…