使用kotlin android扩展在不同布局中使用相同的id引用视图

在我的Android项目中,我有两个布局:num_info和num_info_pack。 两者都有ID“圈子”的意见。 所以我认为通过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,我就会在哪个圈子里混淆?

这里的解决方案是在进口。 您必须导入两个布局

 import kotlinx.android.synthetic.main.num_info_pack 

 import kotlinx.android.synthetic.main.num_info_inet_plus_pack 

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

我现在没有安装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) 

不知道这是否会起作用,因为我现在无法测试。 请让我知道它是否工作。

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

除了已经非常好的答案之外,如果您在项目的多个布局中使用相同的ID,则选择哪一个并不重要。 无论定义哪种布局,类似的ID最终指向相同的视图。 因此,您可以放弃其他导入,只留下当前activity/fragment/view与您相关的布局

希望有所帮助