如何解决如何为列表中每个打开的片段项保存状态?
目前我正在创建消息演示应用程序。我正在关注 MVVM architecture pattern
并使用 Android Jetpack navigation library
浏览片段。当前问题:当我打开应用程序(片段 A)时,它会显示一个聊天列表。当我导航到 Chat1 时,它会加载并显示其消息。然后我回到片段 A (popBackStack()
)。当我再次导航到 Chat1 时,它再次创建新片段并再次加载消息。这是一种资源浪费。有没有办法让每个打开的列表项保存它的状态,所以当我重新打开之前打开的任何列表项时,它不需要再次加载消息?谢谢。
class Users : Fragment() {
// onCreateView -> create binding
/* viewModel.event.observe(viewLifecycleOwner,EventObserver { user ->
val bundle = bundleOf("user" to user)
findNavController().navigate(R.id.action_usersFragment_to_messagesFragment,bundle)
}
*/
}
class UsersViewModel : ViewModel() {
val usersMutable = MutableLiveData<MutableList<User>>()
val usersMediator = MediatorLiveData<List<User>>()
val event = MutableLiveData<Event<User>>()
init {
// usersMediator.addSource(usersMutable) ...
// load users
}
// function binding in view (.xml)
fun onClickUser(user: User) {
event.value = Event(user);
}
}
class Messages : Fragment() {
// onCreateView -> create binding
}
class MessagesViewModel : ViewModel() {
val dataMutable = MutableLiveData<MutableList<Message>>()
val dataMediator = MediatorLiveData<List<Message>>()
init {
// dataMediator.addSource(dataMutable) ...
// load messages
}
}
class MainActivity() {
override fun onBackPressed() {
navController.popBackStack()
}
}
解决方法
您可以将 1 ViewModel
用于 2 fragments
。我推荐使用 Room Database
进行数据存储。因此,它可以防止您不断提问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。