Android开发中kotlinx.android.synthetic找不到解决方法

前言

在Kotlin项目中,kotlinx.android.synthetic 是一个用于在XML布局中直接通过ID访问视图(Views)的便捷库。

然而,自从Android Jetpack的2.0版本开始,Google推荐使用更现代的视图绑定和View Binding技术来代替Synthetic Binding,因为它们提供了更好的类型安全和更清晰的代码结构。

现在使用kotlinx.android.synthetic 会开发工具报错。

需要迁移至View Binding

删除原来的

1
import kotlinx.android.synthetic.main.activity_main.*

替换为

1
import com.xhly.easystud.databinding.ActivityMainBinding

使用View Binding

自从Android Jetpack的2.0版本开始,Google推荐使用更现代的视图绑定和View Binding技术来代替Synthetic Binding,因为它们提供了更好的类型安全和更清晰的代码结构。

The ‘kotlin-android-extensions’ Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the ‘kotlin-parcelize’ plugin.

启用View Binding

build.gradle文件中启用View Binding。

1
2
3
4
5
android {
viewBinding {
enabled = true
}
}

使用View Binding

对于每个布局文件,Android Studio会生成一个绑定类。

例如,对于activity_main.xml,你可以通过ActivityMainBinding来访问视图。

1
2
3
4
import com.xhly.easystud.databinding.ActivityMainBinding

val binding = ActivityMainBinding.inflate(layoutInflater)
val myView: View = binding.myView // 假设在XML中id为myView的视图

移除Kotlin Android Extensions依赖‌

build.gradle中移除kotlin-android-extensions依赖。

清理和重建项目

在Android Studio中,尝试清理并重建项目(Build > Clean ProjectBuild > Rebuild Project)。

使用AI来迁移

使用AIi迁移Kotlin Android Extensions至View Binding,涉及到id的命名方式变更和inclue组件的影响,迁移结果不太好,这里使用AI迁移至findViewById()的方式。

我这里使用的TRAE AI插件。

第一步 先找到需要迁移的文件列表

1
2
我之前使用了kotlinx.android.synthetic.*来直接访问布局控件
找出app下所有使用kotlinx.android.synthetic的以.kt为后缀的文件列表

第二步 进行迁移

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 背景

我之前使用了kotlinx.android.synthetic.*来直接访问布局控件,升级了kotlin版本后,构建报错Unresolved reference: synthetic。

## 指令

使用 findViewById 来替换,我会给出一个待修改的文件列表。
需要你删掉文件的import kotlinx.android.synthetic,改为findViewById()的方式访问组件。
需要同步组件调用处变量名的修改,组件的类型需要跟对应xml里的组件id对应的类型对得上,并添加improt导包 (注意避免重复导入)。

## 约束

1.不要进行其它额外的操作,如生成文档,python脚本。


这些是需要修改的文件列表:[D:\Project\android\schoolandroid\app\src\main\java\com\xhly\easystud\zhan\studentyuxi\YuxiActivity.kt]