Sobes.tech
Junior

Räägi mulle Jetpack ViewModelist.

sobes.tech AI

Vastus AI-lt

ViewModel hoiab ja juhib kasutajaliidese seotud andmeid, võttes arvesse elutsüklit. See jääb ellu konfiguratsioonimuutuste (ekraani pööramise, paigutuse muutmise) ajal, vältides andmete kaotsiminekut.

Peamised omadused:

  • Andmete säilitamine: ViewModel ei hävine konfiguratsiooni muutmisel, säilitades kasutajaliidese oleku.
  • Loogika eraldamine UI-st: Ärilogika asetatakse ViewModel-i, mis lihtsustab testimist ja hooldust Activity/Fragment.
  • Integreerimine LiveData-ga: Kasutatakse sageli LiveData-ga andmete muutuste jälgimiseks.

Näide kasutamisest:

// MyViewModel.kt
import androidx.lifecycle.ViewModel

class MyViewModel : ViewModel() {
    // Andmed, mida tuleb säilitada konfiguratsioonimuutuste ajal
    var counter = 0
}
// MyActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.lifecycle.ViewModelProvider

class MyActivity : AppCompatActivity() {
    private lateinit var viewModel: MyViewModel
    private lateinit var counterText: TextView
    private lateinit var incrementButton: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Saadakse ViewModel
        viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

        counterText = findViewById(R.id.counter_text)
        incrementButton = findViewById(R.id.increment_button)

        // Näidata andmeid ViewModel-ist
        updateCounterDisplay()

        incrementButton.setOnClickListener {
            viewModel.counter++
            updateCounterDisplay()
        }
    }

    private fun updateCounterDisplay() {
        counterText.text = viewModel.counter.toString()
    }
}

Elutsükkel: ViewModel elab nii kaua, kuni elab seotud Scope (nt Activity). Kui Scope lõpeb, hävitatakse ViewModel.

ViewModelProviders (praegu ViewModelProvider) kasutati enne Kotlin-i ViewModel-i eksemplari saamiseks. Kotlin-is soovitatakse kasutada ViewModelProvider(this).get(MyViewModel::class.java).

Peamised eelised UI-oleku hoidmise klasside ees:

  • Püsimine konfiguratsioonimuutuste ajal.
  • Juhtimine Jetpacki elutsükli raamistiku poolt.

Puudused:

  • Võib muutuda liiga suureks keerulise UI-loogika korral.
  • Ei tohi sisaldada viiteid View-ile, Context-ile või teistele elutsükli objektidele, et vältida mälulekkeid.