使用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
与您相关的布局
希望有所帮助