Чӣ гуна ҳолати ViewModel-ро дар компонентҳои меъмории Android нигоҳ доштани мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Мазмуни ҳолати ViewModel чанд роҳҳои зеринро дорад:
-
Истифодаи SavedStateHandle: Роҳи беҳтарин барои нигоҳ доштани миқдори ками маълумотҳо, ки барои барқарор кардани ҳолат пас аз нобуд кардани раванди кор истифода мешавад.
SavedStateHandleинтерфейси монанд ба харита барои нигоҳ доштани маълумот ва гирифтани он медиҳад.class MyViewModel(private val state: SavedStateHandle) : ViewModel() { private val _name = state.getLiveData<String>("name") val name: LiveData<String> = _name fun saveName(newName: String) { state.set("name", newName) } } -
Нигоҳдории ҳолат дар бандл (Bundle): Дар ҳамоҳангӣ бо
onSaveInstanceStateбарои нигоҳ доштани маълумотиActivityёFragmentистифода мешавад, на мустақиманViewModel. Ин маълумот метавонад барои оғозёбӣ ё барқарор карданиViewModelпас аз эҷод истифода шавад.// Дар Activity ё Fragment override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) // Нигоҳдории маълумот, ки баъдан барои оғозёбӣ истифода мешавад outState.putString("some_data_for_vm", "арзиши муҳим") } // Истифодаи маълумот дар ViewModel (бо фабрика) class MyViewModelFactory(private val initialData: String) : ViewModelProvider.Factory { override fun <T : ViewModel?> create(modelClass: Class<T>): T { if (modelClass.isAssignableFrom(MyViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return MyViewModel(initialData) as T } throw IllegalArgumentException("Таснифи ViewModel номаълум") } } class MyViewModel(private val initialData: String) : ViewModel() { // Истифодаи initialData барои барқарор кардани ҳолат } -
Нигоҳдории маълумот дар захираҳои доимӣ: Барои маълумоти мураккаб ё калонтар, метавон истифода бурд SharedPreferences, базаи додаҳо (масалан, Room) ё файлҳо.
ViewModelметавонад бо репозитории ҳамкорӣ кунад, ки дастрасиро ба ин маълумотҳо идора мекунад.class MyViewModel(private val userRepository: UserRepository) : ViewModel() { fun saveUser(user: User) { userRepository.saveUser(user) } fun getUser(id: Long): LiveData<User> { return userRepository.getUser(id) } } // Мисоли UserRepository class UserRepository(private val userDao: UserDao) { fun saveUser(user: User) { // Логикаи нигоҳдорӣ дар базаи додаҳо } fun getUser(id: Long): LiveData<User> { // Логикаи гирифтани маълумот аз базаи додаҳо } }
Интихоби усул вобаста ба навъи ва миқдори маълумотҳое, ки бояд нигоҳ дошта шаванд, ва сценарийҳои барқарор кардани ҳолат (масалан, нобуд кардани раванди кор ё тағироти конфигуратсия). SavedStateHandle беҳтарин барои нигоҳ доштани ҳолате мебошад, ки бояд пас аз нобуд кардани раванди кор боқӣ монад ва UI-ро барқарор кунад.