Kotlin的综合性质冲突

我是Kotlin的新手。 除了其他一些非常有趣的事情之外,我发现Android扩展应该让我使用活动的视图,而不需要findViewById

其实它通过在我的进口中添加这一行非常好:

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

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

当我尝试在第一个TextView(活动的一个)上调用方法时,我看不到预期的结果,就好像该调用将在另一个视图上完成一样。 作为对此的确认,当我调用txtTitle.parent ,我看到其他txtTitle的父代和兄弟,而不是预期的。

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

关于进口的kotlin文件说

如果名称冲突,我们可以通过使用关键字来消除歧义,从而在本地重命名冲突实体

所以你可以尝试导入具有不同别名的布局:

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

并使用带有相应限定符的textviews: lActivity.txtTitlelView.txtTitle

你的问题的另一个可能的解决方案是只要导入一个,省略另一个,假设所有你需要的ID都在那一个。

在一天结束时,类似的ID指向相同的东西,它是否从一个布局或另一个布局导入并不重要。

希望有所帮助

你可以尝试下面的东西为TextView具有相同的ID从不同的布局。

 import kotlinx.android.synthetic.main.activity_main.text_hello as lActivity import kotlinx.android.synthetic.main.extra_layout.text_hello as lView 

使用lActivity.text = "Some text"TextViewactivity_mainlView.text = "Some text"TextViewextra_layout