【Android】在Kotlin中更優雅地使用LiveData
由於LiveData#Observer
介面定義在Java中,且接受一個Nullable
引數,導致其不能很好的相容Kotlin的SAM以及NonNull等語法特性:
viewModel.order.observe(viewLifecycleOwner, Observe {
it?.let { applyCurrentOrder(it) }
})
Observe { .. }
不能省略?.let
顯得非常多餘
現在使用lifecycle-livedata-ktx
可以幫我們在Kotlin中更好的使用LiveData:
dependencies {
def lifecycle_version = "2.1.0" // or higher
...
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
...
}
然後我們可以在程式碼中更加優化的observe
了:
class MyViewModel: ViewModel() {
private val _data: MutableLiveData<MyData> = MutableLiveData()
val order: LiveData<MyData> get() = _data
..
fun updateData(data: MyData) {
_data.value = data
}
}
import androidx.lifecycle.observe //ktx的observe
class MyFragment: Fragment(R.layout.my_fragment) {
private val viewModel: MyViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewModel.order.observe(viewLifecycleOwner) {
// observe接受lambda,且it為NonNull
applyData(it)
}
}
fun applyData(order: Order) {
..
}
}
期待未來所有的AAC庫都會用Kotlin重寫,那時就不需要這些Ktx庫做橋接了。
相關文章
- Kotlin如何優雅地使用Scope FunctionsKotlinFunction
- 更優雅的在 mpvue 中使用 canvasVueCanvas
- 教你更優雅地寫 API 之「列舉使用」API
- 在Java中如何優雅地判空Java
- 更優雅地實現策略模式模式
- 如何更優雅地切換 Git 分支Git
- 如何使用 RxJS 更優雅地進行定時請求JS
- 更優雅的在 Xunit 中使用依賴注入依賴注入
- 如何優雅地使用 macOSMac
- 如何在 Vue 中優雅地使用 CSS Modules?VueCSS
- Android Q 讓使用者優雅地管理位置許可權Android
- 使用 Alfred 在 markdown 中優雅的使用圖片Alfred
- 使用Kotlin高效地開發Android App(二)KotlinAndroidAPP
- 使用Kotlin高效地開發Android App(四)KotlinAndroidAPP
- 使用Kotlin高效地開發Android App(三)KotlinAndroidAPP
- 使用Kotlin高效地開發Android App(一)KotlinAndroidAPP
- 教你更優雅地寫 API 之「靈活地任務排程」API
- spring boot 整合 Pebble,更優雅地輸出變數Spring Boot變數
- 教你更優雅地寫 API 之「記錄日誌」API
- 在vue專案中優雅的使用SvgVueSVG
- Android優雅地申請動態許可權Android
- CSS——把“可以動的盒子”更優雅地展示:② “居中”盒子CSS
- 如何優雅地改善程式中for迴圈
- Android優雅地處理按鈕重複點選Android
- 如何優雅地求和?
- CSS——把“可以動的盒子”更優雅地展示:① “偽元素”妙用CSS
- 教你更優雅地寫 API 之規範響應資料API
- 使用Spring Validation優雅地校驗引數Spring
- 優雅地使用GET和POST請求方法
- 學會優雅地使用@Valid系列註解
- Android 優雅地處理後臺返回的騷資料Android
- 優雅的在 react 中使用 TypeScriptReactTypeScript
- 優雅的在vue中使用TypeScriptVueTypeScript
- Python 使用 backoff 更優雅的實現輪詢Python
- 哪些語言能更優雅地實現裝飾器模式? - frankel模式
- 在Android上優雅的申請許可權Android
- 使用Kotlin高效地開發Android App(五)完結篇KotlinAndroidAPP
- Android JetPack~ LiveData (一) 介紹與使用AndroidJetpackLiveData