小编Pri*_*ain的帖子

实时数据在更改片段时再次赋予旧价值

我正在跨多个片段使用来自共享 ViewModel 的实时数据。我有一个登录片段,它需要用户的电话号码和密码,然后用户按下登录按钮,我为此调用 API,现在如果登录失败,我将显示一个 toast“登录失败”,现在如果用户转到“ForgotPassword”屏幕,该屏幕也使用与“SignInFragment”相同的视图模型,然后从忘记密码屏幕按回,出现登录片段,但它再次显示 toast“登录失败”,但 API没有被调用,它从之前注册的观察者那里获取数据,那么有什么方法可以解决这个问题吗?

SignInFragment.kt

class SignInFragment : Fragment() {

    private lateinit var binding: FragmentSignInBinding

    //Shared view model across two fragments
    private val onBoardViewModel by activityViewModels<OnBoardViewModel>()

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = DataBindingUtil.inflate(
            inflater,
            R.layout.fragment_sign_in,
            container,
            false
        )
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        onBoardViewModel.signInResponse.observe(viewLifecycleOwner) { response ->
            //This is calling again after coming back from new fragment it.
            showToast("Sign In Failed")
        } …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-livedata android-viewmodel android-jetpack

6
推荐指数
1
解决办法
6332
查看次数