đ LiveData vs MutableLiveData
đ LiveData vs MutableLiveData
LiveData āĻāĻŦং MutableLiveData āĻĻুāĻোāĻ Android Architecture Components-āĻāϰ āĻ ংāĻļ, āϝা MVVM (Model-View-ViewModel) āĻĒ্āϝাāĻাāϰ্āύে āĻŦ্āϝāĻŦāĻšৃāϤ āĻšā§ UI āĻāĻŦং data āϏāĻ িāĻāĻাāĻŦে āĻŽ্āϝাāύেāĻ āĻāϰাāϰ āĻāύ্āϝ।
đ āĻŽূāϞ āĻĒাāϰ্āĻĨāĻ্āϝ:
- LiveData → āĻļুāϧুāĻŽাāϤ্āϰ observe āĻāϰা āϝাā§, āĻিāύ্āϤু āĻĒāϰিāĻŦāϰ্āϤāύ (update) āĻāϰা āϝাā§ āύা।
- MutableLiveData → observe āĻāϰা āϝাā§ + āĻĒāϰিāĻŦāϰ্āϤāύāĻ āĻāϰা āϝাā§ (update āĻāϰা āϝাā§)।
đĸ LiveData (āĻļুāϧু āĻĒā§া āϝাāĻŦে, āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে āύা)
LiveData āĻšāϞো āĻāĻāĻি āĻ
āĻŦāĻাāϰāĻেāĻŦāϞ āĻĄেāĻা āĻšোāϞ্āĻĄাāϰ āĻ্āϞাāϏ, āϝা UI lifecycle-aware āĻāĻŦং UI-āĻāϰ āϏাāĻĨে āĻ
āĻোāĻŽেāĻিāĻ āĻāĻĒāĻĄেāĻ āĻšā§।
āĻāĻāύ āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāĻŦো?
đ āϝāĻāύ āĻļুāϧু observe āĻāϰāϤে āĻšāĻŦে, āĻিāύ্āϤু modify āĻāϰāϤে āĻšāĻŦে āύা।
đ ViewModel āĻĨেāĻে UI-āĻāϰ āĻাāĻে āĻĄেāĻা āĻĒাāĻ াāύোāϰ āĻāύ্āϝ।
āĻāĻĻাāĻšāϰāĻŖ:
class MyViewModel : ViewModel() {
private val _message = MutableLiveData<String>("Hello, World!") // MutableLiveData
val message: LiveData<String> = _message // āĻļুāϧুāĻŽাāϤ্āϰ observe āĻāϰাāϰ āĻāύ্āϝ LiveData
}
đ āĻāĻাāύে, _message āĻšāϞো MutableLiveData, āϝেāĻা āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে।
đ āĻিāύ্āϤু message āĻšāϞো LiveData, āϝেāĻা āĻļুāϧু observe āĻāϰা āϝাāĻŦে, āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে āύা।
đĩ MutableLiveData (āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে)
đ MutableLiveData āĻšāϞো LiveData-āĻāϰ child class, āϝা observe āĻāϰা āϝাāĻŦে + āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে।
āĻāĻāύ āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāĻŦো?
đ āϝāĻāύ āĻĄেāĻা āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰāϤে āĻšāĻŦে (update āĻāϰāϤে āĻšāĻŦে)।
đ āϝāĻāύ ViewModel āĻŦা Repository āĻĨেāĻে āĻĄেāĻা āĻŽāĻĄিāĻĢাāĻ āĻāϰāϤে āĻšāĻŦে।
āĻāĻĻাāĻšāϰāĻŖ:
class MyViewModel : ViewModel() {
val count = MutableLiveData<Int>(0) // āĻĄেāĻা āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে
fun incrementCount() {
count.value = (count.value ?: 0) + 1 // āύāϤুāύ āĻŽাāύ āϏেāĻ āĻāϰা āĻšāĻ্āĻে
}
}
đ āĻāĻাāύে, count āĻšāϞো MutableLiveData, āϝা āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে।
đ incrementCount() āĻŽেāĻĨāĻĄ āĻāϞ āĻāϰāϞে āύāϤুāύ āĻŽাāύ āϏেāĻ āĻāϰা āĻšāĻŦে।
đ āϏংāĻ্āώেāĻĒে āĻĒাāϰ্āĻĨāĻ্āϝ:
| Feature | LiveData | MutableLiveData |
|---|---|---|
| āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাā§? | ❌ āύা (immutable) | ✅ āĻš্āϝাঁ (mutable) |
| observe āĻāϰা āϝাā§? | ✅ āĻš্āϝাঁ | ✅ āĻš্āϝাঁ |
| ViewModel āĻĨেāĻে āĻĄেāĻা āĻĒাāĻ াāύো āϝাā§? | ✅ āĻš্āϝাঁ | ✅ āĻš্āϝাঁ |
| ViewModel āĻĨেāĻে āĻĄেāĻা āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাā§? | ❌ āύা | ✅ āĻš্āϝাঁ |
đĨ āĻোāύāĻি āĻāĻāύ āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāĻŦো?
| Use Case | Which One to Use? |
|---|---|
| UI āĻĨেāĻে āĻļুāϧু observe āĻāϰা āϞাāĻāĻŦে, modify āĻĻāϰāĻাāϰ āύেāĻ। | LiveData |
| āĻĄেāĻা āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰāϤে āĻšāĻŦে, āϝেāĻŽāύ Button press āĻāϰāϞে Counter āĻŦাā§āĻŦে। | MutableLiveData |
| ViewModel āĻĨেāĻে UI-āϤে āĻĄেāĻা āĻĒাāĻ াāϤে āĻšāĻŦে, āĻিāύ্āϤু UI āĻĄেāĻা āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰāϤে āĻĒাāϰāĻŦে āύা। | LiveData |
đ¯ Best Practice (LiveData + MutableLiveData āĻāĻāϏাāĻĨে āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰা)
đĄ MutableLiveData āĻļুāϧু ViewModel-āĻāϰ āĻŽāϧ্āϝে āĻĨাāĻāĻŦে, āĻিāύ্āϤু UI āĻļুāϧুāĻŽাāϤ্āϰ LiveData observe āĻāϰāĻŦে।
✅ āĻাāϞো āĻোāĻĄ āϏ্āĻাāĻāϞ:
class MyViewModel : ViewModel() {
private val _count = MutableLiveData<Int>(0) // MutableLiveData (āĻĒāϰিāĻŦāϰ্āϤāύāϝোāĻ্āϝ)
val count: LiveData<Int> = _count // LiveData (āĻļুāϧু observe āĻāϰাāϰ āĻāύ্āϝ)
fun incrementCount() {
_count.value = (_count.value ?: 0) + 1 // āĻĄেāĻা āĻāĻĒāĻĄেāĻ
}
}
đ UI āĻļুāϧুāĻŽাāϤ্āϰ count observe āĻāϰāĻŦে, āĻিāύ্āϤু ViewModel āĻāϰ āĻŦাāĻāϰে āĻĨেāĻে _count āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাāĻŦে āύা! đ
đ āĻļেāώ āĻāĻĨা:
✅ LiveData → āĻļুāϧু observe āĻāϰা āϝাā§ (āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাā§ āύা)।
✅ MutableLiveData → observe āĻāϰা + āĻĒāϰিāĻŦāϰ্āϤāύ āĻāϰা āϝাā§।
✅ āĻাāϞো āĻĒ্āϰ্āϝাāĻāĻিāϏ: ViewModel-āĻ MutableLiveData āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰুāύ, āĻিāύ্āϤু UI-āϤে āĻļুāϧু LiveData āĻĒাāĻ াāύ।
āĻāĻĒāύাāϰ āĻি āĻāϰāĻ āĻোāύো āĻĒ্āϰāĻļ্āύ āĻāĻে? đ đ
Comments
Post a Comment