[英]How to create an extension function with multiple receivers in Kotlin?
[英]How to create a View extension function in Kotlin
我正在嘗試在 Kotlin 中創建一個擴展函數。 我確實嘗試了幾個教程,但不太明白如何實現這一點。
我正在嘗試創建一個setWidth()
函數
//Find my_view in the fragment
val myView = v.findViewById<RelativeLayout>(R.id.my_view)
//Then use the extension function
myView.setNewWidth(500)
這就是我定義擴展函數的方式
private fun View?.setNewWidth(i: Int) {
val layoutParams: ViewGroup.LayoutParams = View.layoutParams
layoutParams.width = i
View.layoutParams = layoutParams
}
我不明白我需要在這里做什么。
我想將擴展函數稱為myView.ExtensionFunction()
,但我不知道該怎么做。 這些教程沒有信息量。
我認為這里的主要問題是擴展函數是如何定義的,特別是具有View.layoutParams
的行 - 這是調用View
上不存在的靜態屬性。 您需要使用實例中的那個。 如果您像這樣編寫擴展函數:
private fun View?.setNewWidth(i: Int) {
val layoutParams = this?.layoutParams
layoutParams?.width = i
this?.layoutParams = layoutParams
}
然后,您可以根據需要調用該方法。 就個人而言,我覺得這不是那么可讀,我會刪除此處的可空性並將其寫為:
private fun View.setNewWidth(i: Int) {
val newLayoutParams = layoutParams
newLayoutParams?.width = i
layoutParams = newLayoutParams
}
唯一的區別是現在您需要?.
如果視圖可以為空,則調用該方法,我個人認為這很好 - myView?.setNewWidth(123)
。 我假設大多數時候你不會有一個可為空的視圖。
好的,所以我的問題是我不知道如何引用調用視圖。 即,我不知道如何調用myView
並在擴展函數setNewWidth()
設置其屬性
所以,我試過用this?
它奏效了。
然后,我對擴展函數做了一些更改,以便為Relative Layout
myView
工作。
這是我的工作:
private fun RelativeLayout?.setWidth(i: Int) {
val layoutParams: ViewGroup.LayoutParams? = this?.layoutParams
layoutParams?.width = i
this?.layoutParams = layoutParams
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.