有沒有辦法做這樣的事情:
view.setOnClickListener { Log.e("","Hello") }
view.setOnClickListener { Log.e("","World") }
同時讓兩個 Log 顯示。
我在自定義視圖上有一些按鈕,這些按鈕在單擊時執行一些通用操作,我在建構式中對其進行了初始化,現在我想根據類外的情況設定一些額外的行為。而且我注意到像上面這樣的操作只會覆寫 onClickListener。
我能想到的可能是在物件中存盤單元陣列,并讓視圖在單擊時執行它的元素。然后使用訪問器將函式附加到陣列。
有沒有更簡單的方法來保留現有操作并在最后附加新操作?
uj5u.com熱心網友回復:
為什么不使用標志并像這樣根據該標志選擇行為。使用監聽器是災難的根源,因為它是一個監聽器,它一直在監聽,也就是說,只要按下該按鈕,內部的代碼就會執行,如果有兩個塊,一個塊將優先于另一個塊。
button.setOnClickListener{
when(flag){
"hello" -> Log.e("TAG","Hello")
"world" -> Log.e("TAG","World")
}
}
uj5u.com熱心網友回復:
使用此代碼,您可以根據需要添加點擊偵聽器:
class CustomView @JvmOverloads constructor(
context: Context?,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private val clickCallBacks = mutableListOf<((view: View) -> Unit)>()
fun addClickListener(listener: ((view: View) -> Unit)) {
clickCallBacks.add(listener)
}
override fun setOnClickListener(l: OnClickListener?) {
super.setOnClickListener {
//TODO do what you want to do
l?.onClick(it)
for (listener in clickCallBacks) {
listener.invoke(it)
}
}
}
}
在您的活動或片段中:
customView.view.addClickListener{ Log.e("","Hello") }
customView.view.addClickListener{ Log.e("","World") }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/407450.html
標籤:
