目前我正在创建消息传递演示应用程序。我遵循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()
}
}
您可以将1ViewModel
用于2 fragments
。我推荐使用Room Database
进行数据存储。所以它可以防止你不断地提问。