đ¯ ViewModel āĻ AndroidViewModel āĻāĻāĻĻāĻŽ āĻŽāĻাāϰāĻাāĻŦে āĻŦোāĻাāύো (āĻŦাংāϞাāϝ়)
đ¯ ViewModel āĻ AndroidViewModel āĻāĻāĻĻāĻŽ āĻŽāĻাāϰāĻাāĻŦে āĻŦোāĻাāύো (āĻŦাংāϞাāϝ়)
āĻাāĻŦুāύ, āĻāĻĒāύি āĻāĻāĻা āĻĻোāĻাāύ āĻাāϞাāύ। đĒ
āĻāĻĒāύাāϰ āĻĻোāĻাāύে āĻাāϏ্āĻāĻŽাāϰ āĻāϏে, āĻিāύিāϏ āĻেāύে, āĻাāĻা āĻĻেāϝ়, āĻāĻŦাāϰ āĻāϞে āϝাāϝ়। āĻāĻāύ āϝāĻĻি āĻĻোāĻাāύেāϰ āϞাāĻāĻ āĻ
āĻĢ āĻāϰে āĻāĻŦাāϰ āĻ
āύ āĻāϰেāύ (āĻŽাāύে, āĻĻোāĻাāύ āĻŦāύ্āϧ āĻāϰে āĻāĻŦাāϰ āĻুāϞেāύ), āϤাāĻšāϞে āĻি āĻĻোāĻাāύেāϰ āϏāĻŦ āĻšিāϏাāĻŦ-āĻĒāϤ্āϰ āĻāϧাāĻ āĻšāϝ়ে āϝাāĻŦে? đ¤ āύা! āĻাāϰāĻŖ āĻĻোāĻাāύেāϰ āĻšিāϏাāĻŦ āĻাāϤাāϝ় āϏāĻŦ āϤāĻĨ্āϝ āϞেāĻা āĻĨাāĻে।
āĻ িāĻ āĻāĻāϰāĻāĻŽāĻাāĻŦেāĻ ViewModel āĻাāĻ āĻāϰে!
đ§ ViewModel āĻী? - (āĻĻোāĻাāύ-āĻāϰ āĻāĻĻাāĻšāϰāĻŖ āĻĻিā§ে āĻŦুāĻুāύ)
đ ViewModel āĻšāϞো āϏেāĻ āĻĻোāĻাāύেāϰ āĻšিāϏাāĻŦ āĻাāϤা đ
āĻāĻāĻা āĻ
্āϝাāĻĒে Activity āĻŦা Fragment āĻšāĻ্āĻে āĻāĻŽাāĻĻেāϰ āĻĻোāĻাāύ।
ViewModel āĻšāĻ্āĻে āϏেāĻ āĻšিāϏাāĻŦ āĻাāϤা, āϝেāĻাāύে āϏāĻŦ āĻĻāϰāĻাāϰি āϤāĻĨ্āϝ āĻāĻŽা āĻĨাāĻে। āϝāĻāύāĻ āĻĻোāĻাāύ (āĻ
্āϝাāĻ্āĻিāĻিāĻি) āĻŦāύ্āϧ āĻšāϝ় (destroy āĻšāϝ়) āĻāĻŦং āĻāĻŦাāϰ āĻাāϞু āĻšāϝ় (recreate āĻšāϝ়), āϤāĻāύāĻ āĻšিāϏাāĻŦেāϰ āϤāĻĨ্āϝ āĻšাāϰিāϝ়ে āϝাāϝ় āύা, āĻাāϰāĻŖ āϏেāĻা āĻāϞাāĻĻা āĻাāϤাāϝ় (ViewModel) āϞেāĻা āĻāĻে!
✅ ViewModel-āĻāϰ āϏুāĻŦিāϧা:
1️⃣ Activity/Fragment āĻŦāύ্āϧ āĻšāϞেāĻ āĻĄেāĻা āĻšাāϰাāϝ় āύা।
2️⃣ UI-āϏংāĻ্āϰাāύ্āϤ āĻĄেāĻা āϏংāϰāĻ্āώāĻŖ āĻ āĻĒāϰিāĻাāϞāύা āĻāϰে।
3️⃣ āϞাāĻāĻĢāϏাāĻāĻেāϞেāϰ āϏাāĻĨে āϝুāĻ্āϤ āύāϝ়, āϤাāĻ UI āĻāĻŽ্āĻĒোāύেāύ্āĻেāϰ āϧ্āĻŦংāϏ āĻšāϝ়ে āϝাāĻāϝ়াāϰ āĻĒ্āϰāĻাāĻŦ āĻĒāĻĄ়ে āύা।
đ ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āύা āĻāϰāϞে āĻী āĻšāĻŦে?
āϝāĻĻি ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āύা āĻāϰে āϏাāϧাāϰāĻŖ āĻেāϰিāϝ়েāĻŦāϞ āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰা āĻšāϝ়, āϤাāĻšāϞে āϏ্āĻ্āϰিāύ āĻোāϰাāύোāϰ (Screen Rotation) āĻĢāϞে āĻŦা āĻ ্āϝাāĻĒ āĻŽিāύিāĻŽাāĻāĻ-āĻŽ্āϝাāĻ্āϏিāĻŽাāĻāĻ āĻāϰāϞে āĻĄেāĻা āĻšাāϰিāϝ়ে āϝাāĻŦে!
đ āĻāĻāĻা āĻোāĻ āĻāĻĻাāĻšāϰāĻŖ: (āĻুāϞ āĻ āĻ িāĻ āĻĒāĻĻ্āϧāϤি)
❌ āĻুāϞ āĻĒāĻĻ্āϧāϤি (āϏাāϧাāϰāĻŖ āĻেāϰিāϝ়েāĻŦāϞ āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϞে)
class MyActivity : AppCompatActivity() {
var count = 0 // āĻāĻ āĻেāϰিāϝ়েāĻŦāϞ āϏ্āĻ্āϰিāύ āĻোāϰাāϞে āĻšাāϰিāϝ়ে āϝাāĻŦে!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun increment() {
count++ // āϏ্āĻ্āϰিāύ āĻোāϰাāύোāϰ āĻĒāϰ count āĻāĻŦাāϰ 0 āĻšāϝ়ে āϝাāĻŦে!
}
}
✅ āĻ িāĻ āĻĒāĻĻ্āϧāϤি (ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϞে)
class CounterViewModel : ViewModel() {
var count = 0 // āϏ্āĻ্āϰিāύ āĻোāϰাāϞেāĻ āĻšাāϰাāĻŦে āύা!
fun increment() {
count++
}
}
đ¯ AndroidViewModel āĻী? - (āĻāϰো āĻāĻীāϰāĻাāĻŦে āĻŦোāĻা)
āϧāϰুāύ, āĻāĻĒāύি āĻāĻĒāύাāϰ āĻĻোāĻাāύেāϰ āĻŦāĻĄ় āĻšিāϏাāĻŦ āϰাāĻāϤে āĻাāύ, āϝেāĻাāύে āĻŦ্āϝাংāĻ āĻ
্āϝাāĻাāĻāύ্āĻেāϰ āϤāĻĨ্āϝ, āĻāĻŽা-āĻāϰāĻেāϰ āĻšিāϏাāĻŦ, āĻĒুāϰāύো āϞেāύāĻĻেāύেāϰ āϰেāĻāϰ্āĻĄ āϰাāĻা āĻĻāϰāĻাāϰ।
āĻāĻুāϞোāϰ āĻāύ্āϝ āĻļুāϧু āϏাāϧাāϰāĻŖ āĻাāϤা (ViewModel) āĻĻিāϝ়ে āĻাāĻ āĻšāĻŦে āύা। āĻāĻāύ āĻĻāϰāĻাāϰ āĻšāĻŦে āĻŦ্āϝাংāĻেāϰ āϏাāĻĨে āĻাāύেāĻ্āĻ āĻĨাāĻা āĻšিāϏাāĻŦ āĻাāϤা đĻ, āϝেāĻাāύে āĻŦ্āϝাংāĻেāϰ āĻ
āĻĢিāϏিāϝ়াāϞ āϤāĻĨ্āϝ (Application Context) āĻĨাāĻāĻŦে।
✅ AndroidViewModel āĻšāĻ্āĻে āϏেāĻ āĻŦ্āϝাংāĻেāϰ āĻšিāϏাāĻŦ āĻাāϤা
đ AndroidViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰা āĻšāϝ় āϝāĻāύ āĻāĻŽাāĻĻেāϰ āĻ ্āϝাāĻĒেāϰ Context āĻĻāϰāĻাāϰ āĻšāϝ়, āϝেāĻŽāύ Database āĻŦা SharedPreferences āĻŦ্āϝāĻŦāĻšাāϰেāϰ āĻāύ্āϝ।
đ AndroidViewModel-āĻāϰ āĻĻāϰāĻাāϰ āĻāĻŦে āĻĒāĻĄ়āĻŦে?
āϝāĻĻি āĻāĻĒāύাāϰ āĻ ্āϝাāĻĒে āĻĄাāĻাāĻŦেāϏ, SharedPreferences āĻŦা Context āύিāϰ্āĻāϰ āĻোāύো āĻিāĻু āĻĻāϰāĻাāϰ āĻšāϝ়, āϤাāĻšāϞে āϏাāϧাāϰāĻŖ ViewModel āϝāĻĨেāώ্āĻ āύāϝ়, āϤāĻāύ AndroidViewModel āϞাāĻāĻŦে।
āĻāĻĻাāĻšāϰāĻŖ: āĻāĻĒāύি āϝāĻĻি āĻোāύো āĻ ্āϝাāĻĒ āĻŦাāύাāύ āϝেāĻাāύে āĻāĻāĻাāϰেāϰ āĻĒāĻāύ্āĻĻ (theme, language settings) SharedPreferences-āĻ āϏংāϰāĻ্āώāĻŖ āĻāϰেāύ, āϤāĻāύ AndroidViewModel āĻĻāϰāĻাāϰ āĻšāĻŦে।
đ āĻāĻāĻা āĻোāĻ āĻāĻĻাāĻšāϰāĻŖ: (ViewModel āĻŦāύাāĻŽ AndroidViewModel)
❌ āĻুāϞ āĻĒāĻĻ্āϧāϤি (āϏাāϧাāϰāĻŖ ViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϞে, āϝেāĻাāύে Context āĻĻāϰāĻাāϰ)
class MyViewModel : ViewModel() {
fun getDataFromDatabase(): List<User> {
val database = Room.databaseBuilder( // āĻāĻাāύে Context āĻĻāϰāĻাāϰ, āĻিāύ্āϤু ViewModel-āĻ āύেāĻ!
context, AppDatabase::class.java, "my_db"
).build()
return database.userDao().getAllUsers()
}
}
đ āĻāĻাāύে context āĻĻāϰāĻাāϰ, āĻিāύ্āϤু āϏাāϧাāϰāĻŖ ViewModel-āĻ Context āĻĨাāĻে āύা!
✅ āĻ িāĻ āĻĒāĻĻ্āϧāϤি (AndroidViewModel āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāϞে, āϝেāĻাāύে Context āĻĻāϰāĻাāϰ)
class MyAndroidViewModel(application: Application) : AndroidViewModel(application) {
private val context = getApplication<Application>().applicationContext
fun getDataFromDatabase(): List<User> {
val database = Room.databaseBuilder(
context, AppDatabase::class.java, "my_db"
).build()
return database.userDao().getAllUsers()
}
}
đ āĻāĻাāύে context āĻĒাāĻāϝ়া āϝাāĻ্āĻে, āĻাāϰāĻŖ AndroidViewModel-āĻāϰ āĻŽাāϧ্āϝāĻŽে āĻāĻŽāϰা Application Context āĻĒেāϝ়েāĻি!
đ¯ ViewModel āĻŦāύাāĻŽ AndroidViewModel āĻĒাāϰ্āĻĨāĻ্āϝ (āϏাāϰাংāĻļ āĻেāĻŦিāϞ)
| āĻŦিāώ⧠| ViewModel | AndroidViewModel |
|---|---|---|
| Context āĻĒাāĻāϝ়া āϝাāϝ়? | ❌ āύা | ✅ āĻš্āϝাঁ |
| āĻোāĻĨাāϝ় āĻŦ্āϝāĻŦāĻšাāϰ āĻāĻĒāϝোāĻী? | UI Data āϏংāϰāĻ্āώāĻŖ | Context āύিāϰ্āĻāϰ āĻাāĻ (Database, SharedPreferences) |
| Activity/Fragment āϞাāĻāĻĢāϏাāĻāĻেāϞেāϰ āϏাāĻĨে āϝুāĻ্āϤ? | ❌ āύা | ❌ āύা |
| Memory āĻŦ্āϝāĻŦāϏ্āĻĨাāĻĒāύা āĻেāĻŽāύ? | āĻāĻŽ āĻŦ্āϝāĻŦāĻšৃāϤ āĻšāϝ় | āĻāĻāĻু āĻŦেāĻļি āĻŦ্āϝāĻŦāĻšৃāϤ āĻšāϝ় (Context āϧāϰে āϰাāĻাāϰ āĻাāϰāĻŖে) |
đ āĻļেāώ āĻāĻĨা (āĻāĻāύ āĻোāύāĻা āĻŦ্āϝāĻŦāĻšাāϰ āĻāϰāĻŦো?)
- āĻļুāϧু UI Data āϏংāϰāĻ্āώāĻŖ āĻāϰāϤে āĻšāϞে:
ViewModel - āϝāĻĻি Context āĻĻāϰāĻাāϰ āĻšāϝ় (āϝেāĻŽāύ Database, Preferences):
AndroidViewModel
đ āϏাāϧাāϰāĻŖ āύিāϝ়āĻŽ:
- āϝāĻĻি āĻāĻĒāύাāϰ āĻোāĻĄে
ContextāĻĻāϰāĻাāϰ āύা āĻšāϝ়, āϤাāĻšāϞেViewModelāύিāύ। - āϝāĻĻি
ContextāĻĻāϰāĻাāϰ āĻšāϝ়, āϤাāĻšāϞেAndroidViewModelāĻŦ্āϝāĻŦāĻšাāϰ āĻāϰুāύ।
đĨ āĻāĻāύ āύিāĻļ্āĻāϝ়āĻ āϏ্āĻĒāώ্āĻ āĻŦুāĻāϤে āĻĒেāϰেāĻেāύ! đ
āĻোāύো āĻĒ্āϰāĻļ্āύ āĻĨাāĻāϞে āύিāϰ্āĻĻ্āĻŦিāϧাāϝ় āĻিāĻ্āĻেāϏ āĻāϰুāύ! đ
Comments
Post a Comment