我试图在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
消息再次显示。同样,当我锁定然后解锁设备时(无论多长时间),吐司会一次又一次地显示。
为什么会这样?
如何只展示一次祝酒词?
我相信你的情况是这样的:
- 你锁定了你的设备->在某一点上,片段的视图被销毁(视图模型没有)
- 您解锁设备并返回应用程序->你的片段获得新的视图,尝试观察实时数据(记住视图模型与p1相同)->事件被触发。
如何处理:为了保持简短,请查看这里https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150(我不是作者)