Kolin 更優雅的封裝ProgressDialog

Knight_Davion發表於2017-06-30

最近已經開始全面轉投kotlin,不得不說使用kotlin開發專案真的是非常舒服,編寫程式碼過程中真的有一種所想即所得的感覺,不會再讓一些無聊的東西打斷你的思路,迴歸正題,這邊介紹一下kotlin中的一個小技巧。

在我們平常開發過程中肯定會使用到各種progressDialog,最常見的比如請求網路資料時在沒有返回資料前會顯示一個載入中的狀態,大多數時候我們會封裝一個CustomProgressdialog,當呼叫的時候初始化它,並通過show方法進行顯示,通常我們會把這個CustomProgressdialog放在BaseActivity中,方便各個介面進行呼叫,下面來看kotlin中是如何完成這些操作的。

首先需要一個CustomProgressdialog,先完成一個這種樣式的CustomProgressdialog


由於這片文章的重點不在於如何實現這個CustomProgressdialog,封裝的具體過程就不說了,如果需要文末有github地址。

現在我們已經有了一個CustomProgressdialog,接下來自定義一個介面LoadingDialogManager

interface LoadingDialogManager {

   val loadingDialog: LoadingDialog

   fun showLoadingDialog(context: Context) {
        loadingDialog.showDialog(context, "載入中", true, null)
    }

    fun hideLaodingDialog() {
        loadingDialog.dismiss()
    }
}複製程式碼

在這個介面中有兩個方法showLoadingDialog和hideLaodingDialog,分別對應dialog的show和dismiss。注意這裡並沒有對LoadingDialog進行例項化
下面讓我們的BaseActivity實現這個介面,由於我們的介面中有一個loadingDialog成員,所有還需要實現它

open class BaseActivity : AppCompatActivity(), LoadingDialogManager {
    override val loadingDialog by lazy { LoadingDialog(this) }
}複製程式碼

這裡使用到了委託延遲屬性的概念,簡單來說只有當loadingDialog 真正被使用的時候採例項化它。這樣就減輕了activity初始化的壓力。

在具體的activity中直接呼叫showLoadingDialog和hideLaodingDialog即可完成LoadingDialog的顯示和隱藏了。

class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        showLoadingDialog(this)
    }
}複製程式碼

有沒有感覺這樣一封裝程式碼變得簡潔不少?其實這只是一種思路,其他的一些公用元件也可以通過這種方式進行封裝,最後奉上githu地址
github.com/shiweibsw/K…

題外話:最近正在利用業餘時間完全使用kotlin高仿一版B站客戶端,目前正在開發過程中,歡迎有興趣的小夥伴加入,github地址:github.com/shiweibsw/i…

相關文章