8

在我的 Android 项目中,我有两种布局:num_info 和 num_info_pack。两者都有 id 为“circle”的视图。所以我认为通过 layout_name.circle 引用这些视图可以解决问题:

val inetView = activity.layoutInflater.inflate(R.layout.num_info_pack, parent, false)
    inetView.circle.setBackgroundResource(background)

但是圆圈带有红色下划线,上面写着:

重载分辨率歧义。所有这些功能都匹配。

public val View.circle:查看!在 kotlinx.android.synthetic.main.num_info_pack.view 中定义

public val View.circle:RelativeLayout!在 kotlinx.android.synthetic.main.num_info_inet_plus_pack.view 中定义

如果我专门说 inetView.circle,为什么会混淆我在谈论哪个圈子?

4

3 回答 3

6

除了已经非常好的答案之外,如果您在项目中的多个布局中具有相同的 ID,那么您选择哪一个并不重要。相似的 ID,不管它定义了哪种布局,最终都指向同一个视图。因此,您可以丢弃其他导入,只保留当前对您重要的布局activity/fragment/view

希望有帮助

于 2017-05-19T14:09:15.810 回答
6

这里的解决方案是导入。您必须导入两个布局,例如

import kotlinx.android.synthetic.main.num_info_pack

import kotlinx.android.synthetic.main.num_info_inet_plus_pack

删除其中一个并保留一个与您要导入的相应布局文件。它应该可以正常工作。

于 2017-08-18T08:10:59.723 回答
2

我现在手头没有 android studio,但我认为这会解决你的问题:

package XXX

import kotlinx.android.synthetic.main.num_info_inet_plus_pack.view.circle as inetViewCircle
import kotlinx.android.synthetic.main.num_info_pack.view as circle
//...
val inetView = activity.layoutInflater.inflate(R.layout.num_info_pack, parent, false)
inetViewCircle.setBackgroundResource(background)

不知道这是否可行,因为我现在无法测试它。请让我知道它是否有效。

问题是名称冲突,所以我认为导入别名可能会有所帮助。

于 2017-05-19T05:07:37.427 回答