最近已經(jīng)開始全面轉(zhuǎn)投kotlin,不得不說使用kotlin開發(fā)項(xiàng)目真的是非常舒服,編寫代碼過程中真的有一種所想即所得的感覺,不會在讓一些無聊的東西打斷你的思路,回歸正題,這邊介紹一下kotlin中的一個小技巧。
在我們平常開發(fā)過程中肯定會使用到各種progressDialog,最常見的請求網(wǎng)絡(luò)數(shù)據(jù)時在沒有返回數(shù)據(jù)會顯示一個加載中的狀態(tài),大多是時候我們會封裝一個CustomProgressdialog,當(dāng)調(diào)用的時候初始化它,通過show方法進(jìn)行顯示,通常我們會把這個CustomProgressdialog放在BaseActivity中,方便各個界面進(jìn)行調(diào)用,下面來看kotlin中是如何完成這些操作的。
首先需要一個CustomProgressdialog,先完成一個這種樣式的CustomProgressdialog

這邊文章的重點(diǎn)不在如何實(shí)現(xiàn)這個CustomProgressdialog,封裝的具體過程就不說了,如果需要文末有g(shù)ithub地址。
現(xiàn)在我們已經(jīng)有了一個CustomProgressdialog,接下來自定義一個接口LoadingDialogManager
interface LoadingDialogManager {
val loadingDialog: LoadingDialog
fun showLoadingDialog(context: Context) {
loadingDialog.showDialog(context, "加載中", true, null)
}
fun hideLaodingDialog() {
loadingDialog.dismiss()
}
}
在這個接口中有兩個方法showLoadingDialog和hideLaodingDialog,對應(yīng)dialog的show和dismiss。注意這里并沒有對LoadingDialog進(jìn)行實(shí)例化
下面讓我們的BaseActivity實(shí)現(xiàn)這個接口,由于我們的接口中有一個loadingDialog成員,所有還需要實(shí)現(xiàn)它
open class BaseActivity : AppCompatActivity(), LoadingDialogManager {
override val loadingDialog by lazy { LoadingDialog(this) }
}
這里使用到了委托延遲屬性的概念,簡單來說只有當(dāng)loadingDialog 真正被使用的時候采實(shí)例化它。這樣就減輕了activity初始化的壓力。
在具體的activity中直接調(diào)用showLoadingDialog和hideLaodingDialog即可完成LoadingDialog的顯示和隱藏了。
class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
showLoadingDialog(this)
}
}
有沒有感覺這樣一封裝代碼變得簡潔不少?其實(shí)這只是一種思路,其他的一些公用組件也可以通過這種方式進(jìn)行封裝,最后奉上githu地址
https://github.com/shiweibsw/KotlinDialog
題外話:最近正在利用業(yè)余時間完全使用kotlin高仿一版B站客戶端,目前正在開發(fā)過程中,歡迎有興趣的小伙伴加入,github地址:https://github.com/shiweibsw/iBiliPlayer-Kotlin