未解决的参考 - 活动无法识别 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(尝试了所有建议)

未解决的参考:viewModelScope - Kotlin Android

当我有意启动它时,为啥android无法识别第二个活动?

Android中的Firebase:firestore是未解决的参考