Android导航组件未解决的引用问题

7

我刚从Windows平台转换到Mac平台,在尝试构建我的应用程序时,出现了以下消息:

Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public fun `Activity;`.findNavController(viewId: Int): `NavController;` defined in androidx.navigation
public fun `View;`.findNavController(): `NavController;` defined in androidx.navigation

错误在那行代码里:
bSettingsLogout.findNavController().navigate(R.id.authenticationActivity)

在Windows上,我使用的是旧版本的3.3金丝雀版,但在开发者网站上,导航组件方面没有任何变化。我不确定这是否是Mac或Android Studio金丝雀版6的错误。任何帮助将不胜感激!
3个回答

3

有两种方式可以实现findNavController

  • public static NavController findNavController (View view)
  • public static NavController findNavController (Activity activity, int viewId)

但是你使用了:

findNavController()  

您缺少必要的参数


1
但是它昨天还能用,而且我已经按照实现手册操作了。O.o 谢谢,我会检查一下的。 - Péter Kovács
findNavController需要一个活动或片段作为第一个参数:Navigation.findNavController(myActivity, R.id.nav_host) - user8959091
2
由于OP正在使用Kotlin,因此在导航库的Kotlin版本中提供了一些扩展函数,例如fun View.findNavController(): NavController = Navigation.findNavController(this),这意味着您只需在“View”对象上调用findNavController(),而不是将“View”传递给静态函数。 - Ben Ezard
mTak说得对。将gradle升级到3.3.0.alpha6会导致View.findNavController()无法工作,但Navigation.findNavController(View)可以使用。 (@mTak,如果您在回答中也写入了gradle问题,我会接受它的) - Péter Kovács
很奇怪,因为我已经降级了Gradle,View.findNavController就像以前一样工作了。 - Péter Kovács
显示剩余4条评论

2

是的,这似乎只是最新版Android Studio Canary的一个bug。至少,回滚到之前的Canary版本对我解决了这个问题。

我正在运行Windows,所以这不是Mac的问题。


0
在我的情况下,我有两个不同的导航文件,但是它们具有相同的ID。我改变了其中一个,然后清除、重新构建,这对我起作用了。
<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">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接