繁体   English   中英

LiveData 观察者在片段中多次触发

[英]LiveData observer fired multiple in fragment

我试图在fragment中实现登录功能。 以下是代码:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    MainViewModel mainViewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class);
    String email = ....;
    String password = ....;
    SignInLiveData signInStatusObserver = mainViewModel.getSignInStatusLiveData(email, password);
    signInStatusObserver.observe(getViewLifeCycleOwer(), new Observer<Boolean>{
            @Override
            public void onChanged(Boolean isSignedIn) {
                if(isSignedIn)
                    Toast.makeText(requireContext(), "SignIn Successful", Toast.LENGTH_LONG).show();
                else
                    Toast.makeText(requireContext(), "SignIn Unsuccessful", Toast.LENGTH_LONG).show();
            }
    }
}

它工作正常,但是当我锁定手机然后解锁(使用屏幕上的应用程序)时,再次显示Toast消息。 当我再次锁定然后解锁设备(任意次数)时,吐司会一次又一次地显示。

为什么会这样?
如何只显示一次吐司?

我相信你的情况是这样的:

  1. 你锁定你的设备->在某些时候片段的视图被破坏(视图 model 不是)
  2. 您解锁设备并返回应用程序 -> 您的片段获得新视图,尝试观察实时数据(请记住视图 model 与 p1 中的相同)-> 事件被发出。

如何处理:为了简短起见,请在此处查看https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150 (我不是作者)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM