LiveData观察者触发多个in片段



我试图在fragment中实现SignIn功能。下面是它的代码:

@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. 你锁定了你的设备->在某一点上,片段的视图被销毁(视图模型没有)
  2. 您解锁设备并返回应用程序->你的片段获得新的视图,尝试观察实时数据(记住视图模型与p1相同)->事件被触发。

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