当前位置: 首页 > 知识库问答 >
问题:

无法使用导航控制器android从一个方向导航到另一个方向时实例化片段?

班言
2023-03-14

当使用以下代码从一个片段导航到另一个片段时,我通常没有问题:

           val login = AuthenticationFragmentDirections.actionToLogin()
            Navigation.findNavController(fragmentView).navigate(login)

该应用程序以前工作正常,但不知何故它不再工作,并出现错误:

androidx。碎片应用程序。片段$InstantiationException:无法实例化片段com。muchammadagunglaksana。公里。碎片。身份验证。LoginUsingEmailFragment:调用片段构造函数导致异常

androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.LoginUsingEmailFragment: calling Fragment constructor caused an exception
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:503)
        at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:184)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:212)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58)
        at androidx.navigation.NavController.navigate(NavController.java:822)
        at androidx.navigation.NavController.navigate(NavController.java:807)
        at androidx.navigation.NavController.navigate(NavController.java:744)
        at androidx.navigation.NavController.navigate(NavController.java:730)
        at androidx.navigation.NavController.navigate(NavController.java:862)
        at com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.AuthenticationFragment$setUpListeners$1.onClick(AuthenticationFragment.kt:55)
        at android.view.View.performClick(View.java:5246)
        at android.widget.TextView.performClick(TextView.java:10565)
        at android.view.View$PerformClick.run(View.java:21200)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:6946)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:485)
        at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:184) 
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:212) 
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58) 
        at androidx.navigation.NavController.navigate(NavController.java:822) 
        at androidx.navigation.NavController.navigate(NavController.java:807) 
        at androidx.navigation.NavController.navigate(NavController.java:744) 
        at androidx.navigation.NavController.navigate(NavController.java:730) 
        at androidx.navigation.NavController.navigate(NavController.java:862) 
        at com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.AuthenticationFragment$setUpListeners$1.onClick(AuthenticationFragment.kt:55) 
        at android.view.View.performClick(View.java:5246) 
        at android.widget.TextView.performClick(TextView.java:10565) 
        at android.view.View$PerformClick.run(View.java:21200) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:145) 
        at android.app.ActivityThread.main(ActivityThread.java:6946) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
     Caused by: kotlin.UninitializedPropertyAccessException: lateinit property mContext has not been initialized
        at com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.LoginUsingEmailFragment.<init>(LoginUsingEmailFragment.kt:47)

通过身份验证,我希望用户可以选择登录或使用代码注册目的地

toLoginButton.setOnClickListener {

            val login = AuthenticationFragmentDirections.actionToLogin()
            Navigation.findNavController(fragmentView).navigate(login)

        }

        toRegisterButton.setOnClickListener {

            val register = AuthenticationFragmentDirections.actionToRegister()
            Navigation.findNavController(fragmentView).navigate(register)

        }

但我不知道我为什么会犯这样的错误:

这是我的导航图的xml:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_graph"
            app:startDestination="@id/destination_home">

    <fragment android:id="@+id/destination_authentication"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.AuthenticationFragment"
              tools:layout="@layout/fragment_authentication">
        <action android:id="@+id/action_toLogin"
                app:destination="@id/destination_loginUsingEmail"/>
        <action android:id="@+id/action_toRegister"
                app:destination="@id/destination_registerUsingEmail"/>
    </fragment>

    <fragment android:id="@+id/destination_registerUsingEmail"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.RegisterUsingEmailFragment"
              tools:layout="@layout/fragment_register_using_email"/>

    <fragment android:id="@+id/destination_welcome"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.WelcomeAndOnBoarding.WelcomeFragment"
              tools:layout="@layout/fragment_welcome">
        <action android:id="@+id/action_toAuthentication"
                app:destination="@id/destination_authentication"/>
    </fragment>

    <fragment android:id="@+id/destination_change_password"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.ChangePasswordFragment"
              tools:layout="@layout/fragment_change_password"/>

    <fragment android:id="@+id/destination_loginUsingEmail"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.Authentication.LoginUsingEmailFragment"
              tools:layout="@layout/fragment_login_using_email">
        <action android:id="@+id/action_toChangePassword"
                app:destination="@id/destination_change_password"/>
    </fragment>

    <fragment android:id="@+id/destination_home" android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.Home.HomeFragment"
              tools:layout="@layout/fragment_home"/>
    <action android:id="@+id/action_global_homeFragment" app:destination="@id/destination_home"/>

    <fragment android:id="@+id/destination_create_event"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.CreateEvent.CreateEventFragment"
              tools:layout="@layout/fragment_create_event"/>

    <fragment android:id="@+id/destination_user_control"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.UserControl.UserControlFragment"
              tools:layout="@layout/fragment_profile"/>

    <fragment android:id="@+id/destination_search" android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.Search.SearchFragment"
              tools:layout="@layout/fragment_search"/>

    <fragment android:id="@+id/destination_choose_user_location"
              android:name="com.muchammadagunglaksana.kumpul_muslim.Fragments.Reusable.ChooseUserLocationFragment"
              tools:layout="@layout/fragment_choose_user_location"/>
    <action android:id="@+id/action_global_chooseUserLocationFragment" app:destination="@id/destination_choose_user_location"/><action android:id="@+id/action_global_destination_welcome" app:destination="@id/destination_welcome"/>

真的需要你的帮助,因为我是新手在使用导航组件

共有1个答案

祁飞翰
2023-03-14

根据错误消息:

原因:科特林。UninitializedPropertyAccessException:lateinit属性McContext尚未初始化

com.muchammadagunglaksana.kumpul_muslim。片段。身份验证。登录使用电子邮件片段。(登录使用电子邮件ragment.kt:47)

您正在构造函数中访问mContext,但您的lateinit变量尚未初始化(不会初始化,因为在构造过程中未附加片段)。

 类似资料:
  • 我有两个活动,一个使用导航图,另一个不使用。如何从不使用导航控制器的活动导航到导航图中的片段? 我试图从ImportMonsterActivity(在将新实体添加到db之后)导航到MainActivity导航图中的EditMonsterFragment。 我想我应该能够创建一个正常的意图,并给它一些额外的东西来指定导航图中的位置,但是我没有找到这种导航的任何留档。一切要么使用另一个应用程序的深层链

  • 您好,我已经使用导航组件和导航图从一个片段导航到另一个片段,我想要的是防止onBack完全按下,这样当用户单击onBack时,应用程序将退出。我正在从注册片段导航到主页片段。 这是导航图中的代码 这是我的代码,当点击注册按钮时,在注册片段中导航

  • 我试着从一个片段到主要片段。编译器不喜欢我的代码,但我不确定是什么问题。转换片段的最佳实践是什么? //这是我要导航到的主片段的xml 2019-07-12 17:49:45.091 959 4-9594/com.example.cribb E/AndroidRuntime:致命异常:主进程:com.example.cribb,PID:9594 Android.content.res.resour

  • 问题内容: 从第一个视图控制器导航到第二个视图控制器时收到错误消息。我的编码就是这样 问题是我总是收到这种错误消息 问题答案: 我已经找到答案了 斯威夫特4 迅捷3

  • 我正在使用android中的新导航架构组件,在移动到一个新的片段后,我被困在清除导航堆栈中。 示例:我在loginFragment中,当我导航到home片段时,我希望该片段从堆栈中清除,这样当用户按下back按钮时,他就不会返回到loginFragment。 我正在使用一个简单的navhostfragment.findnavcontroller(Fragment).navigate(r.id.ho

  • 问题内容: 我正在使用以下代码以编程方式导航到另一个ViewController。它可以正常工作,但是在某种程度上隐藏了。 我该如何解决? (如果需要的话,可通过将嵌入来创建导航栏。) 问题答案: 斯威夫特5 默认的模式呈现样式是卡片。这在顶部显示了以前的视图控制器,并允许用户滑动显示的视图控制器。 为了保留旧样式,您需要修改视图控制器,如下所示: 对于以编程方式创建和情节提要创建的控制器来说都是