編輯:關於android開發
作者:Antonio Leiva
時間:Jan 11, 2017
原文鏈接:https://antonioleiva.com/extension-functions-kotlin/
擴展函數是Kotlin提供的非常酷的特性,在編寫Android應用程序時,你將發現自己會大量使用它。
我們必須承認Android框架有時做些事有點困難,在Java中我們唯一的解決方案是把我們要做事封裝起來,或利用可讀性差的類靜態方法。
你想怎樣才能加額外函數到框架類?這就是Kotlin擴展函數允許我們做的。
如其名稱所隱含的,擴展函數是一種函數,它幫助我們擴展類功能,而無需涉及它們的代碼。現在讓我們來看怎樣定義這些函數,以及一些我個人認為非常有用的例子。
就如同你平常編寫函數那樣,在分隔點之前放置類名稱。這些函數可以放在任何位置上,不過通常在一個擴展(Extensions)文件,這個擴展文件甚至不需要包含一個類。
一個非常簡單的例子,我們要視圖有visible(),使它可見。我們這樣編寫:
1 fun View.visible() { 2 this.visibility = View.VISIBLE 3 }
如你所見,使用該類的功能和屬性時,我加上this保留字,就像我們是在類內部,但是你也可以省略:
1 fun View.visible() { 2 visibility = View.VISIBLE 3 }
我來說明兩三個我喜歡的例子,它們很好的展示了擴展函數的能力。
第一個有用的例子是你在擴展(inflate)視圖內的適配器。通常你這樣用:
1 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 2 val v = LayoutInflater.from(parent.context).inflate(R.layout.view_item, parent, false) 3 return ViewHolder(v) 4 }
在擴展(inflate)視圖的代碼行中使用了parent,太復雜了,並且99%時間裡通常與任何其它適配器相同。為什麼不給ViewGroups擴展視圖的能力?
1 fun ViewGroup.inflate(layoutRes: Int): View { 2 return LayoutInflater.from(context).inflate(layoutRes, this, false) 3 }
現在你可以在上面的代碼使用它:
1 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 2 val v = parent.inflate(R.layout.view_item) 3 return ViewHolder(v) 4 }
一個使用圖像的非常類似例子也可以這樣做。例如,如果你使用Picasso庫,你需要典型的構建器加載圖像:
1 Picasso.with(imageView.context).load(url).into(imageView)
你想要如何能夠告知ImageView自己加載URL嗎?
1 fun ImageView.loadUrl(url: String) { 2 Picasso.with(context).load(url).into(this) 3 } 4 5 imageView.loadUrl(url)
就像你能夠擴展函數一樣,同理也能處理屬性。你需要記住的就一件事,擴展屬性不能保存狀態,而且需要用已有函數請求或更改對象的狀態:
1 val ViewGroup.children: List 2 get() = (0..childCount -1).map { getChildAt(it) }
這個屬性由ViewGroup的children中取出。
現在你就可以直接替代他們:
1 parent.children.forEach { it.visible() }
注意:
it是一個保留字,當函數僅有一個輸入值時,用於訪問函數的輸入值。如我們在其他文章所讀到,你可以命名那些輸入值,當有多個輸入值時,在Lambda表達式左邊寫上par。
利用擴展函數和擴展屬性,你可以擴展任何類(即使你沒有訪問其代碼),而且如同它們是類的一部分一樣使用那些擴展函數和屬性。你將看到的唯一的事就是使用導入一個額外的文件。
如果你喜歡Kotlin,要進一步的學習,建議閱讀《Android開發者的Kotlin》一書,在書中我介紹這點和你在Android應用程序開發期間的許多事情。
前面分別討論了Activity和Service,這次就輪到BroastcastReceiver,B
美女的秘密項目源碼,美女秘密項目源碼 這是一個不錯的Android美女的秘密項目。 源碼下載:http://code.662p.com/list/11
Android5.0之Toobar的使用 總體上來說,Toolbar的使用可以分為兩個方面,一方面是將ToolBar當作ActionBar來用,另一方面就是將Toolba
用Kotlin實現Android定制視圖(KAD 06),kotlinandroid作者:Antonio Leiva 時間:Dec 27, 2016 原文鏈接:https