Junior
Дар бораи Jetpack ViewModel ба ман нақл кунед.
sobes.tech AI
Ҷавоб аз AI
ViewModel нигоҳ медорад ва идора мекунад маълумотҳои вобаста ба UI бо дарназардошти давраи ҳаёти. Он аз тағиротҳои конфигуратсия (тарроҳии экран, тағирот дар тартиб) гузашта, аз гум шудани маълумотҳо пешгирӣ мекунад.
Хусусиятҳои асосӣ:
- Захира кардани маълумот: ViewModel дар тағиротҳои конфигуратсия нест мешавад, ҳолати UI-ро нигоҳ медорад.
- Ҷудо кардани логика аз UI: Логикаи бизнес дар ViewModel ҷойгир мешавад, ки имкон медиҳад тест ва нигоҳдории Activity/Fragment осонтар шавад.
- Интегратсия бо LiveData: Баъзан бо LiveData барои назорат кардани тағиротҳои маълумот истифода мешавад.
Масалан истифода:
// MyViewModel.kt
import androidx.lifecycle.ViewModel
class MyViewModel : ViewModel() {
// Маълумотҳое, ки бояд дар тағиротҳои конфигуратсия нигоҳ дошта шаванд
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
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
counterText = findViewById(R.id.counter_text)
incrementButton = findViewById(R.id.increment_button)
// Намоиши маълумот аз ViewModel
updateCounterDisplay()
incrementButton.setOnClickListener {
viewModel.counter++
updateCounterDisplay()
}
}
private fun updateCounterDisplay() {
counterText.text = viewModel.counter.toString()
}
}
Мӯҳлат: ViewModel то он вақт зинда мемонад, ки Scope (масалан, Activity) зинда бошад. Вақте Scope ба охир мерасад, ViewModel нобуд мешавад.
ViewModelProviders (ҳоло ViewModelProvider) барои гирифтани намунаи ViewModel пеш аз Kotlin истифода мешуд. Дар Kotlin тавсия дода мешавад, ки ViewModelProvider(this).get(MyViewModel::class.java) истифода шавад.
Бартариҳои асосии ViewModel нисбат ба синфҳои оддӣ барои нигоҳ доштани ҳолати UI:
- Аз тағиротҳои конфигуратсия гузашта метавонад.
- Аз ҷониби рамзи ҳаёти Jetpack идора мешавад.
Норасоиҳо:
- Мумкин аст, ки дар сурати логикаи мураккаб дар UI, хеле калон шавад.
- Маҳз набояд дорои истинодҳо ба View, Context ё объектҳои дигар бо ҳаёти цикл бошад, то аз дардҳои хотира пешгирӣ шавад.