gpt4 book ai didi

android-studio - 为什么Android Studio 3.2.1 向导创建的项目不需要导入info.dodata.clipboard.R 等?

转载 作者:行者123 更新时间:2023-12-03 17:18:34 28 4
gpt4 key购买 nike

我通过 Android Studio 3.2.1 向导创建一个项目并保留所有文件夹结构,文件 MainActivity.kt 位于文件夹 info.dodata.myapplication

我可以使用 R.layout.activity_main 而不是 import info.dodata.clipboard.R 。你可以在 Origin Image 看到它

如果我更改文件夹结构,并将 MainActivity.kt 放在文件夹 ui 中,我必须 import info.dodata.clipboard.R 。您可以在我的图片中看到它。

我希望在使用自己的文件夹结构时不要在My Image的MainActivity.kt中添加import info.dodata.clipboard.R等。我能怎么做?

原始图像 enter image description here

我的形象 enter image description here

最佳答案

这是一个等级问题。

考虑一下:

Root .
|
+- package
+ sub
+ SubClass.java
+ other
+ OtherClass.java
+ SubOtherClass.java
+ Main.java
+ MainKotlin.kt

那些可以是 Kotlin 文件、Java 文件,任何东西,都没关系。

Main.java 可以访问同一个包中的类、接口(interface)等,无需导入。

这意味着,如果 Main.java 或 MainKotlin.kt 中的任何一个想要访问类:

  • 其他套餐
  • 子包
  • 父包(在这种情况下不适用,但适用相同的规则)

它需要显式导入它们。所以这个 Main.java:

public class Main {
private SubClass subClassInstance;
private MainKotlin kotlinInstance;
// Content
}

只需要导入SubClass。如果您显式地为 MainKotlin 添加一个导入,IntelliJ/Android Studio 会说它没有被使用。

关于你的问题:

您的包名为 ui,位于根目录中。但是,您的包 ID 是 info.dodata.clipboard。结果,它将在那里生成 R 文件。您可以更改包,但仍需要为该包外的文件导入它。

因此,任何不在 info.dodata.clipboard 包中的 Activity,即子包、父包或完全独立的包,都需要显式导入它。

所以,你有两个选择:

第一个相对简单:将您的事件移动到info.dodata.clipboard

第二个是您当前使用的那个;导入它。

大多数现代 IDE 和编辑器都具有自动完成功能,因此您无需在需要的地方复制粘贴导入语句。将插入符放在新文件中的 R 上(当它显示未解析的引用时),然后使用 Alt+Enter


正如我所说,解决此问题的一种方法是更改​​应用程序 ID。但这不一定可行,并且如果您将其发布到应用商店,也会改变它的显示方式。 This帖子解释得很好。

但是,如果您绝对不想添加导入(IMO,这更容易),您可以添加类型别名。

在开始之前,我想先说明一下为什么它会起作用,但也有局限性。

您可以将任何适用的放在与您的事件相同的包中。正如我已经提到的,当它在同一个包中时,您不需要显式导入。

但是,如果您有多个包含事件的包,则需要为每个事件重复这些操作,这是一个弱点。

此外,您不能只typealias R = com.package.R;,因为它不允许您访问子类。但是,您可以这样做:

typealias id = com.example.R.id;
typealias layout = com.example.R.layout;
typealias anim = com.example.R.anim;
// ... and so on
// Optionally importing it for this and just using `R.layout` instead of `com.package.R.layout`

正如我所说,这会阻止您使用 R.type.name。但它确实允许您即编写 layout.activity_main。编译时,它仍将引用相同的字段。

虽然直接导入更容易,但如果您绝对不想这样做,这是一个选项。但即使是类型别名最终也会导入它,所以你不会绕过导入/限定类名

关于android-studio - 为什么Android Studio 3.2.1 向导创建的项目不需要导入info.dodata.clipboard.R 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53151187/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com