未解决的参考 - 活动无法识别 android studio v4 中的合成导入
Posted
技术标签:
【中文标题】未解决的参考 - 活动无法识别 android studio v4 中的合成导入【英文标题】:Unresolved reference - activity does not recognize synthetic imports in android studio v4 【发布时间】:2021-02-19 07:43:33 【问题描述】:昨晚我注意到我无法从我的主要活动中更改布局中元素的属性 所以我建立了一个新项目,在那里我也遇到了同样的问题。 我找不到我的 android studio 出了什么问题,所以如果有同样问题的人帮助我,我将不胜感激。 as you see in the picture when I call a defined view from the layout in my activity its not recognized 错误将是:未解决的参考:txtHello
【问题讨论】:
我认为您的 android studio 没有任何问题,我只是认为不再支持合成导入。返回 findViewById 那我到底应该怎么做? 【参考方案1】:Kotlin 合成导入不起作用?
嗯,总是有古老的选择:
val foo: TextView = findViewById(R.id.your_id)
我相信合成有 been deprecated,我猜对它的支持刚刚被完全删除
或者,您可以使用ViewBinding,这是另一种选择。
在你的 build.gradle 中启用它:
android
...
buildFeatures
viewBinding true
这会为您的布局生成一个 Binding 对象,因此您可以像这样使用它:
private lateinit var binding: YourLayoutNameBinding
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
binding = YourLayoutNameBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
然后您可以通过绑定访问布局上的所有视图:
binding.name.text = "foo"
【讨论】:
成功了!谢谢,但为什么我不能再使用合成进口了?我确定它一直工作到上周。 @radmanhayati 它已经被弃用了一段时间,我也很喜欢它,但它有缺点,所以我认为他们现在已经完全删除了对它的支持,随着 android studio 的最后一次更新 好的先生,感谢您抽出宝贵的时间,答案真的很有用 "刚刚被完全删除" 他们只在新项目中删除了 `kotlin-android-extensions" 的 Gradle 插件导入。你可以为新项目自己添加它,虽然这可能不是一个好想法,因为它已被弃用。这是弃用的官方解释:android-developers.googleblog.com/2020/11/… 是的,我的回答可能有点夸张,因为您可以仍然添加插件,但我的意思是插件有 i> 默认情况下已完全删除,因此您甚至无法看到它已被弃用,因为它根本不起作用。通常,您会看到某些东西已被弃用,您必须找到替代方案,但在这里它只是强制执行......有点。【参考方案2】:您可以看看 ViewBinding,这是最近在 Android 中引入的一个概念。
你应该看看这个
https://developer.android.com/topic/libraries/view-binding
您不能直接设置视图ID供您在应用中使用,而是需要findViewById(R.id.idTextHello).setOnClickListener()
这就是视图在应用程序中的绑定方式。
【讨论】:
OP 不是在谈论 ViewBinding,他们在谈论合成导入 好的,那么你需要坚持使用 findViewById 您的答案仍然有效,这只是一种替代方案,而不是 OP 所说的【参考方案3】:import kotlinx.android.synthetic.main.activity_main.*
但不要忘记应用 kotlin 扩展
【讨论】:
【参考方案4】:您正在尝试通过已弃用的 Kotlin Synthetics 访问您的视图。 您可以改用 ViewBinding。
在你的模块级 build.gradle 中启用它:
android
...
buildFeatures
viewBinding true
然后在您的活动中,您可以访问如下视图:
private lateinit var _binding: ActivityNameBinding
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
_binding = ActivityNameBinding(layoutInflater)
val view = binding.root
setContentView(view)
然后您可以像这样访问您的视图:
_binding.btn_start.setOnClickListener
...
详细了解ViewBinding,可以看这篇文章:
https://medium.com/geekculture/android-viewbinding-over-findviewbyid-389401b41706
【讨论】:
以上是关于未解决的参考 - 活动无法识别 android studio v4 中的合成导入的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio Build 无法识别我的 MainActivity(尝试了所有建议)