前提・実現したいこと
NavControllerを使用して画面遷移しようとしています。
ところが
findNavController().navigate(R.id.action_profFragment_to_loginFragment)
このコードを入力してビルドしてボタンを押したらエミュレーターが落ちてしまいます。
発生している問題・エラーメッセージ
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.a, PID: 14260 androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.a.Security.Login.LoginFragment: calling Fragment constructor caused an exception at androidx.fragment.app.Fragment.instantiate(Fragment.java:631) at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57) at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:483) at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132) at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162) at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58) at androidx.navigation.NavController.navigate(NavController.java:1066) at androidx.navigation.NavController.navigate(NavController.java:944) at androidx.navigation.NavController.navigate(NavController.java:877) at androidx.navigation.NavController.navigate(NavController.java:863) at androidx.navigation.NavController.navigate(NavController.java:851) at com.example.a.loginDialogFragment.onCreateDialog$lambda-1$lambda-0(loginDialogFragment.kt:26) at com.example.a.loginDialogFragment.$r8$lambda$LUd8obz2APtj56U7y_5N8HaLNa4(Unknown Source:0) at com.example.a.loginDialogFragment$$ExternalSyntheticLambda0.onClick(Unknown Source:2) at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1250) at android.widget.AdapterView.performItemClick(AdapterView.java:330) at android.widget.AbsListView.performItemClick(AbsListView.java:1187) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3179) at android.widget.AbsListView.onTouchUp(AbsListView.java:4109) at android.widget.AbsListView.onTouchEvent(AbsListView.java:3867) at android.view.View.dispatchTouchEvent(View.java:14309) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3112) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2785) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799) at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:488) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1871) at android.app.Dialog.dispatchTouchEvent(Dialog.java:859) at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:446) at android.view.View.dispatchPointerEvent(View.java:14568) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6016) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5819) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5310) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5485) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5542) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333) E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8080) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8031) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7992) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8203) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220) at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loop(Looper.java:183) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at androidx.fragment.app.Fragment.instantiate(Fragment.java:613) ... 62 more Caused by: java.lang.NullPointerException at com.example.a.Security.Login.LoginFragment.getBinding(LoginFragment.kt:29) at com.example.a.Security.Login.LoginFragment.<init>(LoginFragment.kt:31) ... 65 more
該当のソースコード
LoginFragment
package com.example.a.Security.Login import android.content.ContentValues.TAG import androidx.lifecycle.ViewModelProvider import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.findNavController import com.example.a.R import com.example.a.databinding.LoginFragmentBinding import com.google.firebase.auth.FirebaseAuth class LoginFragment : Fragment() { companion object { fun newInstance() = LoginFragment() } private lateinit var viewModel: LoginViewModel private lateinit var auth: FirebaseAuth private var _binding: LoginFragmentBinding? = null private val binding get() = _binding!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.login.setOnClickListener { login() } binding.forgotpassword.setOnClickListener { pw_forget() } } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { _binding = LoginFragmentBinding.inflate(inflater, container, false) return binding.root } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel = ViewModelProvider(this).get(LoginViewModel::class.java) } private fun login() { var email = binding.email.text.toString() var password = binding.password.text.toString() if (email.isNotEmpty() && password.isNotEmpty()) { auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "ログインに成功しました。") } } } } private fun pw_forget() { val navController = findNavController() navController.navigate(R.id.action_loginFragment_to_signinFragment) } override fun onDestroyView() { super.onDestroyView() _binding = null }
自分でやったこと
「calling Fragment constructor caused an exception」
や
「 Unable to instantiate fragment」
などで検索しましたが分かりませんでした。
まだ回答がついていません
会員登録して回答してみよう