簡體   English   中英

Kotlin的合成屬性發生沖突

[英]Kotlin's synthetic properties conflict

我是Kotlin的新手。 在其他非常有趣的事情中,我發現Android擴展, 根據文檔 ,應該讓我使用活動的視圖,而不需要findViewById

實際上,通過在我的導入中添加這一行,它可以很好地工作:

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

問題是當兩個不同的布局包含具有相同id的窗口小部件(即合成屬性的名稱相同)時,
例如兩個不同的TextView ,其id為txtTitle 假設第一個是活動,第二個屬於適配器內部使用的布局。

當我嘗試在第一個TextView(活動的一個)上調用一個方法時,我看不到預期的結果,就像調用將在另一個視圖上完成一樣。 作為對此的確認,當我調用txtTitle.parent ,我會看到其他txtTitle的父級和兄弟級,而不是預期的那些。

難道我做錯了什么? 我發現繞過這個問題的唯一方法是在我的所有布局中使用不同的名稱或繼續使用findViewById ,但遺憾的是浪費這種語言功能......

關於進口kotlin文件

如果存在名稱沖突,我們可以通過使用as關鍵字來本地重命名沖突實體來消除歧義

因此,您可以嘗試使用不同的別名導入布局:

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

並將textviews與相應的限定符一起使用: lActivity.txtTitlelView.txtTitle

您可以嘗試使用不同布局中具有相同ID的TextView

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

您的問題的另一個可能的解決方案是只導入一個並省略另一個,假設您需要的所有ID都存在。

在一天結束時,類似的ID指向相同的東西,它是從一個布局還是從另一個布局導入並不重要。

希望有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM