我完全按照教程。我在android: id下的布局XML文件中为视图命名。当我用静态编程语言键入该名称时,它会以红色突出显示,并且有一个“未解决的引用”错误。
例如,在XML活动中。xml:
<TextView
android:id="@+id/nameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
在科特林主要活动。kt:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
nameTextView // <-- This is highlighted red with error so I can't use it!
}
我之所以提出这个问题,是因为自从Kotlin Android Extensions被弃用以来,我已经多次看到它的变体,但它们都有不同的措辞,而且不太容易搜索。我认为共同的因素是一个新的Android程序员遵循了一个在弃用之前编写的教程。这些教程通常不会指定所使用的功能被称为合成属性或Kotlin Android Extensions、合成视图属性或Kotlin Android Extensions,并且该功能已被弃用。
不能直接访问视图ID。
但你可以使用:
>
Jetpack作为Kotlin Android扩展已被弃用。Source Kotlin Android Extensions Deprection
可以使用视图绑定。视图绑定是一个允许您更轻松地编写与视图交互的代码的功能。在模块中启用视图绑定后,它会为该模块中存在的每个XML布局文件生成一个绑定类。来源:视图绑定
通过静态编程语言中的ID/名称直接引用视图的能力称为“合成属性”,这是静态编程语言Android扩展项目插件的一项功能。
谷歌和JetBrains决定反对Kotlin Android扩展,这意味着他们不再支持它,并阻止你使用它。自从它被弃用后,当你在Android Studio中创建一个新项目时,这个插件就不再包含在新项目中。因此,新项目中不支持合成属性,如果尝试使用它,将出现“未解决的引用”错误。
2017年至2020年间编写的教程经常使用此功能,如果没有更新,他们甚至可能不会提到它的名字,因为它被认为是新项目中理所当然包含的插件。
谷歌在这篇博文中解释了不推荐它的原因,主要原因如下:
获取视图引用的快捷方法是使用findviewbyd
。视图类型应放在括号内
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val nameTextView = findViewById<TextView>(R.id.nameTextView)
// Now you can refer to the view using the variable
nameTextView.setText(R.string.hello_world)
}
在一个片段中,您可能正在使用
onViewCreated
函数中的视图,因此必须在父视图中调用findviewbyd
。(如果需要访问片段中的其他位置,请使用requireView()
而不是view
)。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val nameTextView = view.findViewById<TextView>(R.id.nameTextView)
//...
}
如果你只想完成在Kotlin Android Extensions被弃用之前编写的教程,
findViewById
可能是目前最好的选择。
但是,使用
findViewById
可能会很乏味,而且很容易出错,因为如果搜索的视图不在当前布局中,它不会发出警告。如果这样做,它将在运行时崩溃。因此,谷歌建议使用视图绑定。开始使用视图绑定有几个步骤,但一旦设置好,它比findViewById
更简洁。这里有官方指示。
最后,如果你真的不在乎Kotlin Android Extensions被弃用,并且无论如何都想使用它,那么它目前仍然可以正常工作,但你必须将插件添加到新项目中才能启用它。为此,请打开
构建。gradle
文件,用于应用程序
模块。在插件
块的顶部,可以为kotlin android extensions
添加一行代码,如下所示:
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}
然后按工具栏中的“用Gradle文件同步项目”按钮启用它。
这就是它失败的地方。 完整的错误消息如下所示: # 12 55.48[错误]未能执行goal org . jetbrains . kot Lin:kot Lin-maven-plugin:1 . 5 . 30:compile(编译)on project工具:编译失败# 12 55.48[错误]/workspace/app/src/main/kot Lin/com/ob/tool/log in co
除此之外的所有站点都在解析,但是这里有大约10秒的延迟, 发生以下错误: Traceback(最近一次调用last):文件“D:\ Timur \ OpenServer \ domains \ Parser \ Parser . py”,第13行,main()文件“D:\ Timur \ OpenServer \ domains \ Parser \ Parser . py”,第9行,main p
我正在尝试使用GoogleSheetsAPI复制一个工作表。我已经成功地读写了变量,但是我被和代码卡住了。我的代码如下所示: 当我执行代码时,我得到一个错误: https://sheets.googleapis.com/v4/spreadsheets/[工作表ID已编辑]:批处理更新?alt=json在“请求[0]”处返回“接收到无效的json负载。未知名称“重复的工作表请求”:找不到字段 真正奇
问题内容: 前三行工作正常。当我再次尝试将字符串解析为日期时,出现错误。我该如何解决? 错误看起来像这样: 问题答案: 为我工作。在模式末尾使用“ SSSZ”而不是“ SZ”。
代码: