如何为列表中每个打开的片段项保存状态?

问题描述

目前我正在创建消息演示应用程序。我正在关注 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()
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)