在AS 3.5中,lint无法识别SafeArgs生成的类(方向/ Args)

时间:2019-10-02 14:58:32

标签: android kotlin android-navigation android-architecture-navigation

我正在迁移多个应用程序以使用导航组件,但遇到一个问题-android-safe-args-gradle-plugin生成的Directions / Args类在Android Studio中无法识别。

表明此问题的代码位于github.com/wooldridgetm/android-navigation.git,但问题的症结在于,在下面的代码中, HomeFragmentDirections 无法识别。摘自HomeFragment类的第76-82行。

val b2 = view.findViewById<Button>(R.id.navigate_action_button)
b2.setOnClickListener {
    // PROBLEM: HomeFragmentDirections isn't recognized.
    val action = HomeFragmentDirections.nextAction()
    // PROBLEM: results in Unresolved reference: flowStepNumber
    // action.flowStepNumber = 1
    findNavController().navigate(action)
}

我知道文档说的是什么,我知道HomeFragmentDirections类是由插件生成的,并且位于app / build / 生成的 / < strong>源 / 导航参数 / 调试 / code / example / android / codelabs / navigation,但AS无法识别。

我也知道这确实在插件的v2之前有效...但是现在不起作用,我什至无法获得一个简单的示例来按预期方式工作。

有什么问题的想法吗?


背景

我在10.14.6的MacOS Mojave上使用AS 3.5。

项目build.gradle的依存关系:

classpath 'com.android.tools.build:gradle:3.5.0'
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50"

应用build.gradle文件:

apply plugin: 'androidx.navigation.safeargs.kotlin'

dependencies {
  // Navigation
  def nav_version = "2.1.0"
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}

3 个答案:

答案 0 :(得分:1)

在项目选项卡中选择 Project 视图,这样您就可以看到实际的文件夹。您会注意到 app/build 文件夹变成橙色,这意味着它被排除在外。只需右键单击> 将目录标记为> 取消排除,然后再次右键单击> 将目录标记为> 源根目录。该文件夹将像 java 文件夹一样变蓝,AS 应识别生成的类。

虽然我不确定我是否相信您要使用的所有代码实际上都在 app/build/generated 中,因此您可以更具体地将其标记为源根目录。 So it should look something like this.

答案 1 :(得分:0)

Android Studio / Lint没有“看到”这些类的原因是BIAD(b / c,我是个假人)。

我通过首选项> 编辑器> 文件类型排除了项目面板中的<connectionStrings>文件夹>> 忽略文件和文件夹

无论如何,从忽略文件和文件夹中删除build文件夹就可以了。

Preferences > Editor > File Types

答案 2 :(得分:0)

我也遇到了类似的问题,即使没有手动添加正确的导入操作,这些操作显然也已添加到导航图中,而不是“自动完成”,或者显示了尝试访问它们的kotlin类中的导入选项。

对我来说,解决方法只是重建项目,然后它们会自动出现。