我有一个片段,当用户成功登录时会显示一个弹出窗口。如果我导航到一个新片段并返回,则会再次显示带有先前用户名的弹出窗口。我使用 SingleLiveEvent 修复了这个问题,但现在必须重构我的代码以使用 MediatorLiveData,因为我的数据可以来自 2 个源(远程和数据库),并且它与 SingleLiveEvent 不兼容。
\n\n我尝试使用事件包装器并删除 onDestroyView() 上的观察者,但到目前为止没有任何效果,当我移回片段时,livedata onChanged 函数不断被调用。这是我的一些片段:
\n\n@Override\npublic View onCreateView(LayoutInflater inflater, ViewGroup container,\n Bundle savedInstanceState) {\n // Inflate the layout for this fragment\n binding = FragmentDashboardBinding.inflate(inflater, container, false);\n binding.setLifecycleOwner(getActivity());\n\n //Get the attendanceViewModel for registering attendance\n attendanceViewModel = ViewModelProviders.of(this).get(AttendanceViewModel.class);\n attendanceViewModel.getAttendance().observe(getViewLifecycleOwner(), attendanceAndMember -> {\n if (attendanceAndMember != null && attendanceAndMember instanceof AttendanceMemberModel) {\n clokedInOutMember = attendanceAndMember.member;\n }\n showResultClockInOutPopup();\n });\n\n return binding.getRoot();\n}\n\nprivate void showResultClockInOutPopup() {\n\n clockInBuilder = new AlertDialog.Builder(getActivity());\n\n View view = getLayoutInflater().inflate(R.layout.status_clock_in_out_popup, null);\n TextView …Run Code Online (Sandbox Code Playgroud)