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

时间:2017-05-19 04:37:54

标签: android kotlin kotlin-android-extensions

在我的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,为什么我在谈论哪个圈子?

3 个答案:

答案 0 :(得分:6)

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

import kotlinx.android.synthetic.main.num_info_pack

import kotlinx.android.synthetic.main.num_info_inet_plus_pack

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

答案 1 :(得分:4)

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

中对您来说重要的布局

希望有所帮助

答案 2 :(得分:2)

我现在没有掌上Android工作室,但我认为这将解决您的问题:

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)

不知道这是否有效,因为我现在无法对其进行测试。请告诉我它是否正常工作。

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