我正在跨多个片段使用来自共享 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