Android开发 关于navigation destination xxx is unknown to this NavController 报错的复现分析与解决

问题描述

  在我们使用按键点击触发  Navigation.findNavController(getView()).navigate(R.id.action_aFragment_to_bFragment);  代码跳转到另一个碎片时,在很低的概率下会出现这个 navigation destination xxx is unknown to this NavController 报错问题。这个问题的意思是在启动Fragment的时候,它需要启动的Fragment不存在。

问题原因

  原因很简单,你没有在在点击里做防止连点的机制。 特别是设备在很卡的情况下。 连点会导致多次跳转Fragment,而Navigation启动的Fragment只有一个实例,而连点导致极端短时间内同时启动Fragment,会一些点击并没有Fragment来启动。

复现问题

  你可能会不相信我上面的问题原因说明,因为一般设备在正常的情况下你很难触发这个bug。只有在设备很卡的时候才会出现,我们为了复现这个问题只需要下面这条命令创建一个设备很卡的环境:

adb shell dd if=/dev/zero of=/storage/sdcard0/file bs=1073741824 count=10

这个命令会让设备生成一个占用文件,让设备剩余空间被占满。注意,并不是真正使用了存储空间。然后你只需要在启动Navigation.findNavController(getView()).navigate() 的按键里连点多次就可以触发这个报错了

解决问题办法

做一个防止连点的机制即可,参考我的博客:https://www.cnblogs.com/guanxinjing/p/10905850.html

原文地址:https://www.cnblogs.com/guanxinjing/p/12146253.html

时间: 2024-10-09 04:54:47

Android开发 关于navigation destination xxx is unknown to this NavController 报错的复现分析与解决的相关文章

Android开发时,sqlite创建表成功,insert不报错,但没有数据插入的原因

在android开发过程中,经常要通过sqlite来存储一些数据,这种应用应该是再平常不过了,但是有时难免一时疏忽,就会出现sqlite创建表成功,insert不报错,但没有数据插入. 具体问题详见如下代码: Context ctx;        SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); // 开启事务        db.beginTransaction();        try{                // 数

Error:Cannot build artifact 'XXX:war exploded' because it is included into a circular dependency (artifact 'XXXX:war exploded', artifact 'XXX:war exploded') Idea启动项目报错解决方案

在Idea中使用Maven创建父子工程,第一个Model的那个项目可以很好的运行,在创建一个Model运行时报这个错.原因是tomcat部署了多个Web项目,可能最开始是两个项目的配置文件混用用,最后就报这个错. 网上找的解决方案: 步骤:File--  Porject Struccture ---- Artifacts 在Tomcat部署时war和war exploded区别: war模式:将WEB工程以包的形式上传到服务器 : war exploded模式:将WEB工程以当前文件夹的位置关系

Android开发 出现“无法解析XXX,或者它不是字段”问题

在Android开发中,有时候你会碰到一个java文件中对id和layout的所有引用都失效,出现“无法解析XXX,或者它不是字段”的错误,而其他文件正常.通常我们采用的手段,检查或重建xml文件,clean项目,重启eclipse等等,但都没有效果. 若此时你检查错误文件的头部导库代码,你会发现有一行: Import Android.R 没错就是这句代码捣的鬼.原因是你在引用id或layout的时候eclipse自动导入了系统自带的库,和项目的R文件冲突了,去掉就OK了.

Android(java)学习笔记123:Clock app编写报错

1.首先我们二话不说直接先看报错内容如下: 07-12 08:25:03.572: E/dalvikvm(3602): native fork pid:0 done. 07-12 08:25:03.582: E/dalvikvm(3602): threadid=6: created from interp,name=ReferenceQueueDaemon 07-12 08:25:03.582: E/dalvikvm(3602): threadid=6: calling run(),name=R

Android(java)学习笔记125:Clock app编写报错02

1.首先之间看错误: 07-13 10:07:55.354: E/AndroidRuntime(8008): FATAL EXCEPTION: main 07-13 10:07:55.354: E/AndroidRuntime(8008): java.lang.NullPointerException 07-13 10:07:55.354: E/AndroidRuntime(8008): at com.himi.clock.AlarmActivity.onClick(AlarmActivity.

Android NDK报错(Eclipse)及解决方法

在AndroidNDK开发过程中,工程目录下的jni文件夹下编写的c/c++代码,通常会出现如下的几种类型的报错: 1.Unresolved inclusion:<XXX> 2.syntax error 3.Function 'XXX' could not be resolved 4.Type 'XXX' could not be resolved 5.Symbol 'XXX' could not be resolved 6.Method 'XXX' could not be resolved

Android(java)学习笔记116:PC_Phone通信程序报错

1.首先我写的程序代码如下: 1 package com.himi.udpsend; 2 3 import java.net.DatagramPacket; 4 import java.net.DatagramSocket; 5 import java.net.DatagramSocketImpl; 6 import java.net.InetAddress; 7 import java.net.SocketException; 8 import java.net.UnknownHostExce

android studio 1.5升级到2.0或2.1报错

早一周前,事情终于不多了,没事升级下新版本,有1.5升级到2.0. 升级完成安装后,本来能够在android studio 1.5中好好运行的代码,在升级后,通过clean->make->run后, 应用居然崩溃了,崩溃了...哭死我了...好好的代码居然升级版本后崩溃了... 然后查看崩溃日志,发现是这样: 大概的错误是欢迎界面的xml布局第7行报错... 再看具体的,居然是在不到IamgeView的id,吓死宝宝了,clean.make都没有报错,居然还会找不到id?特么打死我,你看我信不

eclipse升级Android SDK Tool版本到25.2.5后运行项目报错Unable to build: the file dx.jar was not loaded from the SDK folder

概述 由于最近通过SDK-Manager更新了build-tools,当要用到dx.jar这个包时,自动调用最新版本Android SDK build-tools中dx.jar,但是运行android项目时Console却提示: 解决方案 解决办法就是:确保dx.jar这个文件在build-tools\lib和选择的Andriod SDK Tools版本一致就可以. 我用的 Android SDk build-tools 最新版本是 28.0.3,安装的Andriod SDK Tools版本是2