[我收到一个错误:java.lang.IllegalArgumentException,仅当我从RegisterFragment
导航到LoginFragment
,然后按返回按钮转到上一个片段(LoginFragment
)并输入电子邮件和密码时,才会发生该错误。按登录按钮。当我在view!!.findNavController().navigate(LoginFragmentDirections.actionLoginFragmentToHomeContainerFragment())
行中注释时,不会发生此错误,但我必须导航至HomeFragment
。如何解决?
注意:当您不导航到RegisterFragment
]时不会发生错误
LoginFragment:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val binding: FragmentLoginBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false) val login = binding.loginBtn val emailField = binding.inputEmail val passwordField = binding.inputPassword val signUp = binding.loginSignup binding.viewModel = viewModel binding.lifecycleOwner = this signUp.setOnClickListener { view!!.findNavController().navigate(LoginFragmentDirections.actionLoginFragmentToRegisterFragment()) } login.setOnClickListener { val email = emailField.text.toString().trim() val password = passwordField.text.toString().trim() if(email.isEmpty()) { ................. } if(!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { ................. } viewModel.userLogin(email,password) } viewModel.loginAuthData.observe(this, Observer { userAuthData -> if(userAuthData.checkAuth != null) { if(userAuthData.checkAuth!!) { Snackbar.make(activity!!.findViewById(android.R.id.content), "Auth Pass", Snackbar.LENGTH_SHORT).show() //The error doesn't occur if i comment this line >> view!!.findNavController().navigate(LoginFragmentDirections.actionLoginFragmentToHomeContainerFragment()) } else { Snackbar.make(activity!!.findViewById(android.R.id.content), "Auth Fail", Snackbar.LENGTH_SHORT).show() } } }) return binding.root }
错误:
Process: com.example.---, PID: 24721
java.lang.IllegalArgumentException: navigation destination com.example.---:id/action_loginFragment_to_homeContainerFragment is unknown to this NavController
at androidx.navigation.NavController.navigate(NavController.java:789)
at androidx.navigation.NavController.navigate(NavController.java:730)
at androidx.navigation.NavController.navigate(NavController.java:716)
at androidx.navigation.NavController.navigate(NavController.java:907)
at com.example.---.ui.login.LoginFragment$onCreateView$3.onChanged(LoginFragment.kt:71)
at com.example.---.ui.login.LoginFragment$onCreateView$3.onChanged(LoginFragment.kt:20)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:131)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:149)
at androidx.lifecycle.LiveData.setValue(LiveData.java:307)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
at com.example.---.viewModel.LoginViewModel.authCallBack(LoginViewModel.kt:37)
at com.example.---.viewModel.LoginViewModel.access$authCallBack(LoginViewModel.kt:12)
at com.example.---.viewModel.LoginViewModel$firebaseUserAuth$1.invoke(LoginViewModel.kt:15)
at com.example.---.viewModel.LoginViewModel$firebaseUserAuth$1.invoke(LoginViewModel.kt:12)
at com.example.---.data.FirebaseUserAuth$login$1.onComplete(FirebaseUserAuth.kt:27)
at com.google.android.gms.tasks.zzj.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
我收到一个错误:java.lang.IllegalArgumentException,仅当我从LoginFragment导航到RegisterFragment,然后按返回按钮转到上一个片段时,才会发生该错误(...
您正在viewModel.loginAuthData.observe(this, Observer {})
中使用onCreateView()
,即,使用Fragment
(通过this
)作为LifecycleOwner进行观察。这始终是错误的-从viewLifecycleOwner
进行观察时,您应该改用onCreateView()
: