我是Kotlin的新手。在其他非常有趣的事情中,我发现了Android扩展according to the documentation,可以让我无需findViewById即可使用 Activity 的 View 。

实际上,通过在我的导入中添加以下行,它可以很好地工作:

import kotlinx.android.synthetic.main.<layout>.*

问题是当两个不同的布局包含具有相同ID(即,合成属性的名称相同)的小部件时,
例如两个ID为TextView的不同txtTitle。假设第一个位于 Activity 上,第二个属于适配器内部使用的布局。

当我尝试在第一个TextView( Activity 的那个)上调用方法时,我看不到预期的结果,就好像该调用将在另一个 View 上进行一样。为了证实这一点,当我调用txtTitle.parent时,我看到了另一个txtTitle的父级和同级,而不是预期的。

难道我做错了什么?我发现绕过此问题的唯一方法是在所有布局中使用不同的名称或继续使用findViewById,但是很遗憾浪费此语言功能...

最佳答案

kotlin documentation on imports



因此,您可以尝试导入具有不同别名的布局:

import kotlinx.android.synthetic.main.<layoutActivity>.* as lActivity
import kotlinx.android.synthetic.main.<layoutView>.* as lView

并将textviews与相应的限定符一起使用:lActivity.txtTitlelView.txtTitle

07-24 09:49