BottomNavigationView.setupWithNavController 不起作用

2024-03-04

目前我正在开发一个Android应用程序,我想在其中同时利用Android Navigation Component and BottomNavigationView.

在开发上述应用程序时,我签出了官方代码实验室这里有几个问题,但事实证明它们没有任何帮助。

问题是分配navController to my BottomNavigationView似乎没有任何效果 - 单击菜单项不会影响导航主机。

My code:

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns: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">

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/main_host_fr"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/main_nav_bnv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@android:color/transparent"
        android:elevation="0dp"
        app:elevation="0dp"
        app:menu="@menu/menu_main" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

MainActivity.kt

import android.os.Bundle
import android.os.PersistableBundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupWithNavController
import com.aredruss.qurio.databinding.ActivityMainBinding
import com.aredruss.qurio.helpers.viewBinding

class MainActivity : AppCompatActivity() {

    // ViewBindingDelegate
    private val binding: ActivityMainBinding by viewBinding(ActivityMainBinding::inflate)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
    }

    // Using onPostCreate because accessing NavHost in OnCreate causes crashes
    override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onPostCreate(savedInstanceState, persistentState)
        binding.navigationBb.setupWithNavController(findNavController(R.id.main_host_fr))
        NavigationUI.setupWithNavController(binding.mainNavBnv, findNavController(R.id.main_host_fr))
    }
}

nav_graph.xml

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/nav_graph"
    app:startDestination="@id/action_history">

    <fragment
        android:id="@+id/action_history"
        android:name="com.aredruss.qurio.ui.HistoryFragment"
        android:label="HistoryFragment"
        tools:layout="@layout/fragment_history" >
    </fragment>
  
    <fragment
        android:id="@+id/action_settings"
        android:name="com.aredruss.qurio.ui.SettingsFragment"
        android:label="SettingsFragment"
        tools:layout="@layout/fragment_settings" >
    </fragment>
</navigation>

菜单_main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_history"
        android:icon="@drawable/ic_history"
        android:title="History"
        app:showAsAction="withText" />

    <item
        android:id="@+id/action_settings"
        android:title="Settings"
        android:icon="@drawable/ic_settings"
        app:showAsAction="withText"
        />
</menu>

我已经结账了this https://stackoverflow.com/questions/53443965/setupwithnavcontroller-doest-work-for-toolbar/53444133解决方案,但没有任何帮助。


你已经覆盖了错误的onPostCreate():

override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {

你不想要那个需要一个PersistableBundle- 你想要普通的:

override fun onPostCreate(savedInstanceState: Bundle?) {

现在你的onPostCreate()实际上会被调用。

当然,你不应该使用onPostCreate()根本不。相反,你应该是遵循文档 https://developer.android.com/guide/navigation/navigation-getting-started#navigate,其中明确指出您应该使用以下代码来获取您的NavController in onCreate():

val navHostFragment =
    supportFragmentManager.findFragmentById(R.id.main_host_fr) as NavHostFragment
val navController = navHostFragment.navController

它允许您将整个代码编写为:

// ViewBindingDelegate
private val binding: ActivityMainBinding by viewBinding(ActivityMainBinding::inflate)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Note how we actually set the content view from the binding
    setContentView(binding.root)

    val navHostFragment =
        supportFragmentManager.findFragmentById(R.id.main_host_fr) as NavHostFragment
    val navController = navHostFragment.navController

    binding.navigationBb.setupWithNavController(navController)
    binding.mainNavBnv.setupWithNavController(navController)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BottomNavigationView.setupWithNavController 不起作用 的相关文章

  • RecyclerView每隔几个项目都是相同的 - 可扩展项目

    我的 recyclerView 有问题 我正在使用此布局来扩展 recyclerView 中的 cardView https github com AAkira ExpandableLayout https github com AAkir
  • 如何捕获 Runnable 中的封闭范围

    我正在尝试对 a 进行一系列更新HandlerThread使用下面的类 但我有几个关于变量捕获在 Java 中如何工作的问题 1 Is ret通过引用从封闭范围捕获 2 Does this参考Runnable 或者是从封闭范围捕获的 bon
  • 强制关闭导致HTTP实体可能不为空

    这里是发送数据 Http 的完整代码 asynctask private class MyAsyncTaskPupuk extends AsyncTask
  • 在 Android 上检测已接听的拨出电话

    我知道这个问题已经被问过很多次了 但没有答案 但我仍然希望有人终于解决了这个问题 问题 我有一台运行 Android 2 3 的未 root 设备 我需要创建一项服务 打电话 等待呼叫被应答 接听电话后挂断电话 有超时 和其他许多人一样 我
  • Android异步服务调用策略

    这是场景 客户端对服务进行远程调用 返回 void 并提供 回调对象 服务在后台线程上执行一些长时间运行的逻辑 然后使用回调对象来触发以太成功或失败 因为这些操作视觉元素 执行 Activity runOnUiThread 块 该场景运行良
  • Android - 启用和禁用蓝牙 - SDK 3 (OS 1.5) - 以编程方式?

    我编写了代码来以编程方式启用和禁用各种功能 例如 Wifi 振铃模式 飞行模式 您将在电源切换小部件中看到的所有内容 我还没有找到如何做的一个是蓝牙 看来在 SDK level 3 OS 1 5 中没有漂亮的蓝牙管理器类 有没有人指出关于启
  • android studio更新到3.0后任务执行失败

    当我更新 Android Studio 3 0 时 出现错误 unable to merge with dex 然后我添加了mutiDexEnabled true并且还添加了com android support multidex 1 0
  • 垂直翻转 Android Canvas

    有没有一种简单的方法可以在 Android 中翻转画布 我似乎找不到任何可以让我垂直翻转它的东西 这样 y 轴上的零就是手机屏幕的底部而不是顶部 如果解决方案不是特别快也没关系 因为我没有对画布进行任何计算密集的操作 提前致谢 Try ca
  • Android 应用程序主活动出现 ClassNotFoundException

    大多数设备都可以运行我的应用程序 但我收到此错误报告 java lang RuntimeException Unable to instantiate activity ComponentInfo com company app com c
  • Android 和 iOS 中的应用程序文件大小差异

    通过使用两个应用程序分发服务 Android 市场和 Apple 应用程序商店 我发现了一个谜团 Apple 应用程序的文件大小通常大于 Android 应用程序 我似乎找不到任何对这些差异的解释 而且这似乎是一个未触及的主题 我尝试过分配
  • Android物理引擎[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在研究了 3D 游戏编程之后 很快就明白了为什么物理引擎非常有用 Android 支持哪些物理引擎并且可以在 Android 上使用 关于
  • 如何修复运行 Android 模拟器时出现 GPU Driver Issue 错误

    我的 Android 模拟器几周前运行良好 但现在出现错误 当我运行代码时 GPU 驱动程序问题错误对话框与模拟器一起弹出 当我单击 确定 时 Android 模拟器不会按预期运行应用程序 错误如下 Your GPU driver info
  • 具有多个字符串的列表视图

    我正在尝试创建一个包含多个字符串的列表视图 现在我有一个可以实现的功能 while i lt 10 GETS DATA FROM WEBPAGE ETC a DATAFROMWEBPAGE1 b DATAFROMWEBPAGE2 c DAT
  • 如何从Android webview下载文件?

    我下面的代码可以很好地加载 url 页面 并且在搜索歌曲后 当我单击下载链接时 它崩溃了 关于如何让下载管理器与网络视图一起工作的教程并不多 我究竟做错了什么 import java io File import android app A
  • 调用属于Fragment的Activity的函数

    我正在与多个Fragments在 Android 下 我对如何从嵌入式应用程序发送和接收数据感到困惑 为了简单的解释 我有一个ListFragment and a MapFragment使用解释的方法here https stackover
  • Android RxJava 2 JUnit 测试 - android.os.Looper 中的 getMainLooper 未模拟 RuntimeException

    我在尝试为正在使用的演示者运行 JUnit 测试时遇到 RuntimeExceptionobserveOn AndroidSchedulers mainThread 由于它们是纯 JUnit 测试而不是 Android 仪器测试 因此它们无
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • 如何为部分 Android 活动创建通用代码?

    我的申请中有 14 项活动 这 9 个活动中包含自定义标题栏和选项卡窗格 所以在这里我需要在一个地方编写这个通用代码 而不是在每个包含自定义标题栏和选项卡窗格代码的活动中编写冗余代码 即布局及其活动特定代码 有哪些可能的方法可以做到这一点
  • 如何在 Android 的应用程序中使用 LDAP 身份验证?

    我想在我们的应用程序中添加 LDAP 身份验证 我在 Github 上搜索并找到了两个应用程序 但它们无法连接到服务器 通过ldap连接服务器的必要条件是什么 查看 UnboundID SDK 他们有一个适用于 Android 的套件 该应
  • 在android中测量不规则多边形的面积

    我正在开发一个应用程序 在其中我在地图上绘制多边形 并且我使用的地图不是谷歌 它的Mapsforge开源离线地图库 我可以通过将地理点转换为像素点来轻松在地图上绘制多边形 但在这里我想发现是不规则的多边形 为此我做了很多尝试 但它让我失败了

随机推荐

  • 如何在 Angular 2/4 中创建通用控件?

    我必须创建一个控件 模板 通用 html 其中有一个下拉菜单 该公共控件将调用我的数据服务并将该下拉列表与数据绑定 我可以创建一个组件并将其 HTML 作为下拉菜单 然后在所有父组件中调用该组件的选择器 但是 我想要的是我需要将密钥传递给这
  • SSRS行组+列组=行号问题

    我带着另一个 SSRS 问题回来了 我正在处理调查数据 我有一个程序可以返回组织对每个问题的答复计数 因此 我的报告被定义为行的组织组和列的答案组 组织的数量和答案都是可变的 这按预期工作 我尝试在组织旁边添加 RowCount 以便可以显
  • 如何确定安装的 Eclipse 是 32 位版本还是 64 位版本?

    如何确定我的 Windows 7 PC 上的特定 Eclipse 实例是 32 位还是 64 位版本 我检查了 关于 屏幕以及可以从那里调用的迷宫般的对话框 但我没有找到任何线索 另外 在Windows资源管理器中右键单击eclipse e
  • 它只是不可能添加操作扩展图标

    我实际上已经尝试了两周来获得一个用于显示操作扩展的图标 但绝对没有任何效果 我过去见过这样的问题iOS 8 操作扩展图标大小 https stackoverflow com questions 25917700 ios 8 action e
  • 无法安装 ruby​​ gems - zlib 错误

    我正在尝试安装一些 Ruby Gems 以便在收到 Twitter 消息时可以使用 Ruby 来通知我 然而 在做了一个gem update system 现在每次我尝试执行以下操作时都会出现 zlib 错误gem install任何东西
  • 为什么我下载文件时我的移动运营商会重新编码?

    我在 Android 中发现了一个非常奇怪的现象 我发现 当下载超过 3g 的图像时 随后计算的 sha1 与服务器上的文件应有的不同 经过进一步调查 我发现图像实际上被缩小了尺寸并重新编码 我的移动运营商 verizon 似乎正在尝试优化
  • String.format 使用 exception.getMessage() 作为格式

    我有一个与 JAVA 中的 String format 有关的问题 我的 HibernateDao 类负责持久化实体 并在发生任何约束违规时抛出异常 该消息包含 s 并将用作上层的格式 因为我应该担心这一层中的类型 因此无法识别我无法持久化
  • 无法使用 Windows 使用 ssh 密钥访问 gitlab 存储库

    我已关注这些说明 https docs gitlab com ee ssh generate an ssh key pair用于使用 ssh keygen 生成密钥对 当我试图找出问题所在时 我实际上生成了 ed25519 和 rsa 密钥
  • CSS 对角线 - 如何适应其父元素?

    我怎样才能使对角线填充并适合一个盒子 只是纯CSS 不使用任何背景图像 div diagonal container border 1px solid 000 width 400px height 400px margin 0 auto t
  • Vim 删除空行

    我可以运行什么命令来删除 Vim 中的空行 g d g将在与正则表达式匹配的行上执行命令 正则表达式是 空行 命令是 d 删除
  • 如何将回归线添加到具有按因子进行颜色编码的多个数据系列的图中?

    我希望将回归线添加到具有多个按因子进行颜色编码的数据系列的图中 使用brewer pal 调色板 我创建了一个图 其中数据点按因子 plant ID 着色 下面是代码示例 palette brewer pal 12 Paired plot
  • 导入错误:没有名为 Crypto 的模块

    我刚刚开始探索Python 我正在尝试运行 AES 算法代码 但我面临着 导入错误 没有名为 Crypto 的模块 你如何解决这个问题 您必须安装加密包 https pypi python org pypi pycrypto https p
  • 本地化静态网站的正确方法是什么

    我需要将我们的网站本地化为多种语言 该网站由多个静态页面组成 没有动态后端 我们有一个良好的国际社会 人们愿意帮助我们 问题是如何安排网站翻译 正确的工作流程是什么 静态网站本地化的最佳实践是什么 如何组织语言字符串包 如何组织从字符串捆绑
  • onreadystatechange 中 XHR 获取请求 URL

    有没有办法在 onreadystatechange 方法中获取请求的URL 我想运行多个 XHR 请求并知道其中哪个会返回 xhr open GET https url i true xhr onreadystatechange funct
  • django 剥离/删除/清除值

    我正在使用 django 1 6 7 和 python 2 7 我试图在将值提交到数据库之前清除字段中的数据 如果它符合条件 我一直在使用 strip 但这不再有效 搜索 django 文档后我找不到解决方案 这是我的 forms py 文
  • WPF 中的数字数据输入

    您如何处理 WPF 应用程序中的数值输入 如果没有 NumericUpDown 控件 我一直在使用 TextBox 并使用下面的代码处理其 PreviewKeyDown 事件 但它非常丑陋 有没有人找到一种更优雅的方式来从用户获取数字数据而
  • 如何在 NetBeans 平台中隐藏没有图层文件的菜单?

    我很难在 NetBeans 平台中自定义菜单 我看到的示例要求您拥有一个 Layer 文件 但我认为我的 NetBeans 平台项目中没有该文件 要通过图层隐藏菜单 您应该这样做
  • 使用 PHP eval 的风险[重复]

    这个问题在这里已经有答案了 可能的重复 什么时候 如果有的话 eval 不是邪恶的 https stackoverflow com questions 3499672 when if ever is eval not evil php 中的
  • 两个互相引用的类

    我是 C 新手 所以这个问题可能很基本 我有两个类需要互相引用 每个都在自己的头文件中 include 是另一个的头文件 当我尝试编译时 我收到其中一个类的错误 ISO C 禁止声明没有类型的 Foo 如果我切换事物 以便首先解析相反的标头
  • BottomNavigationView.setupWithNavController 不起作用

    目前我正在开发一个Android应用程序 我想在其中同时利用Android Navigation Component and BottomNavigationView 在开发上述应用程序时 我签出了官方代码实验室这里有几个问题 但事实证明它