Sobes.tech
Junior

Jetpack ViewModel haqida gapir.

sobes.tech AI

AIdan javob

ViewModel UI bilan va uni boshqaradi, hayot aylanishini hisobga olgan holda. U konfiguratsiya o'zgarishlaridan (masalan, ekranni aylantirish, joylashuv o'zgarishi) keyin ham yashaydi va ma'lumotlarni yo'qotishni oldini oladi.

Asosiy xususiyatlar:

  • Ma'lumotlarni saqlash: ViewModel konfiguratsiya o'zgarishlari davomida yo'q qilinmaydi va UI holatini saqlaydi.
  • UI dan mantiqni ajratish: Biznes mantiq ViewModel ga joylashtiriladi, bu esa Activity/Fragment ning sinovdan o'tkazilishini va texnik xizmat ko'rsatishni osonlashtiradi.
  • LiveData bilan integratsiya: Ko'pincha ma'lumot o'zgarishlarini kuzatish uchun LiveData bilan ishlatiladi.

Foydalanish misoli:

// MyViewModel.kt
import androidx.lifecycle.ViewModel

class MyViewModel : ViewModel() {
    // Konfiguratsiya o'zgarishlari davomida saqlanishi kerak bo'lgan ma'lumotlar
    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)

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

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

        // ViewModel dan ma'lumotlarni ko'rsatish
        updateCounterDisplay()

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

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

Hayot davomiyligi: ViewModel unga bog'langan Scope (masalan, Activity) yashash davomida yashaydi. Scope tugagach, ViewModel yo'q qilinadi.

ViewModelProviders (hozirda ViewModelProvider) Kotlindan oldin ViewModel nusxasini olish uchun ishlatilgan. Kotlinda ViewModelProvider(this).get(MyViewModel::class.java) tavsiya etiladi.

ViewModel ning oddiy sinflarga nisbatan asosiy afzalliklari:

  • Konfiguratsiya o'zgarishlariga chidamli.
  • Jetpack ning hayot aylanishi ramkasi tomonidan boshqariladi.

Kamchiliklar:

  • Murakkab UI mantiqi bilan juda katta bo'lishi mumkin.
  • Xotira oqib ketmasligi uchun View, Context yoki boshqa hayot aylanishiga bog'liq obyektlarga havolalarni o'z ichiga olmang.