[Android] Use LiveData con más elegancia en Kotlin

Dado que la LiveData#Observerinterfaz está definida en Java y acepta un Nullableparámetro, no es compatible con las funciones de sintaxis SAM y NonNull de Kotlin:

  viewModel.order.observe(viewLifecycleOwner, Observe {
    
      
      it?.let {
    
     applyCurrentOrder(it) }
  })
  • Observe { .. }No se puede omitir
  • ?.letMuy redundante

Ahora el uso lifecycle-livedata-ktxpuede ayudarnos a usar mejor LiveData en Kotlin:

dependencies {
    
    
        def lifecycle_version = "2.1.0" // or higher
        ...
        implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
        ...
    }

Entonces podemos optimizar más en el código 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) {
    
    
    ..
  }
}

Se espera que todas las bibliotecas AAC se reescriban en Kotlin en el futuro, y no habrá necesidad de que estas bibliotecas Ktx se unan.

Supongo que te gusta

Origin blog.csdn.net/vitaviva/article/details/108897407
Recomendado
Clasificación