我的导航控制器中出现此错误,我已经更改了 XML 中的声明,但没有帮助,我更改了 FragmenContainer 的 Fragment 但没有帮助。谁能帮助我解决这个错误?
\n日志:
\nE/AndroidRuntime: FATAL EXCEPTION: main\nProcess: com.example.pokedex, PID: 22784\njava.lang.RuntimeException: Unable to start activity \nComponentInfo{com.example.pokedex/com.example.pokedex.ui.main.MainActivity}: \njava.lang.ClassCastException: androidx.fragment.app.FragmentContainerView cannot be cast to \nandroidx.navigation.fragment.NavHostFragment\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)\n at android.app.ActivityThread.-wrap11(Unknown Source:0)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)\n at android.os.Handler.dispatchMessage(Handler.java:106)\n at android.os.Looper.loop(Looper.java:169)\n at android.app.ActivityThread.main(ActivityThread.java:6521)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)\n Caused by: java.lang.ClassCastException: androidx.fragment.app.FragmentContainerView cannot be cast \nto androidx.navigation.fragment.NavHostFragment\n at com.example.pokedex.ui.main.MainActivity.onCreate(MainActivity.kt:48)\n at android.app.Activity.performCreate(Activity.java:7051)\n at android.app.Activity.performCreate(Activity.java:7042)\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)\xc2\xa0\n at android.app.ActivityThread.-wrap11(Unknown Source:0)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\n at android.os.Looper.loop(Looper.java:169)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:6521)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)\xc2\xa0\nRun Code Online (Sandbox Code Playgroud)\n主要活动:
\nclass MainActivity : AppCompatActivity() {\n\nprivate lateinit var toggle: ActionBarDrawerToggle\nvar currentPath: String? = null\nval TAKE_PICTURE = 1\nval SELECT_PICTURE = 2\n\noverride fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContentView(R.layout.main_activity)\n configBottomNavegacao()\n configNavDrawer()\n\n main_activity_bottom_navigation.setupWithNavController(pokemons_activity_nav_host.findNavController())\n\n toggle = ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close )\n drawerLayout.addDrawerListener(toggle)\n toggle.syncState()\n\n supportActionBar?.setDisplayHomeAsUpEnabled(true)\n\n navView.setNavigationItemSelectedListener {\n when(it.itemId){\n R.id.drawer_camera -> dispatchCameraIntent()\n R.id.drawer_fav -> dispatchFavoritosIntent()\n }\n true\n }\n}\n\nprivate fun dispatchFavoritosIntent() {\n}\n\nprivate fun configNavDrawer() {\n val navHostFragment = supportFragmentManager\n .findFragmentById(R.id.pokemons_activity_nav_host) as NavHostFragment\n val navController = navHostFragment.navController\n\n // verifica onde vai ou nao mostrar o drawer\n navController.addOnDestinationChangedListener { controller, destination, arguments ->\n when(destination.id){\n R.id.listaPokemons -> mostraNavDrawer()\n R.id.listaFavPokemons -> mostraNavDrawer()\n R.id.search -> mostraNavDrawer()\n R.id.detalhesPokemons -> mostraNavDrawer()\n else -> ocultaNavDrawer()\n }\n }\n}\n\nprivate fun mostraNavDrawer() {\n navView.visibility = View.VISIBLE\n}\nprivate fun ocultaNavDrawer(){\n navView.visibility = View.GONE\n}\n\nprivate fun configBottomNavegacao() {\n val navHostFragment = supportFragmentManager\n .findFragmentById(R.id.pokemons_activity_nav_host) as NavHostFragment\n val navController = navHostFragment.navController\n\n // verifica onde vai ou nao mostrar o bottom navigation\n navController.addOnDestinationChangedListener { controller, destination, arguments ->\n when(destination.id){\n R.id.listaPokemons -> mostraBottomNav()\n R.id.listaFavPokemons -> mostraBottomNav()\n R.id.search -> mostraBottomNav()\n R.id.detalhesPokemons -> mostraBottomNav()\n else -> ocultaBottomNavigation()\n }\n\n }\n\n}\n\n//oculta o botao de navega\xc3\xa7ao\nprivate fun ocultaBottomNavigation() {\n main_activity_bottom_navigation.visibility = View.GONE\n}\n\n// exibe o botao de navega\xc3\xa7ao\nprivate fun mostraBottomNav() {\n main_activity_bottom_navigation.visibility = View.VISIBLE\n}\nRun Code Online (Sandbox Code Playgroud)\n主要 XML:
\n<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"\nxmlns:app="http://schemas.android.com/apk/res-auto"\nxmlns:tools="http://schemas.android.com/tools"\nandroid:id="@+id/drawerLayout"\nandroid:layout_width="match_parent"\nandroid:layout_height="match_parent"\ntools:context=".ui.main.MainActivity">\n\n<androidx.fragment.app.FragmentContainerView\n android:id="@+id/pokemons_activity_nav_host"\n class="androidx.navigation.fragment.NavHostFragment"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n app:defaultNavHost="true"\n app:navGraph="@navigation/nav_graph" />\n\n<androidx.constraintlayout.widget.ConstraintLayout\n android:layout_width="match_parent"\n android:layout_height="match_parent">\n\n <com.google.android.material.bottomnavigation.BottomNavigationView\n android:id="@+id/main_activity_bottom_navigation"\n android:layout_width="0dp"\n android:layout_height="wrap_content"\n android:layout_marginStart="0dp"\n android:layout_marginEnd="0dp"\n android:background="@color/bottomNavigation"\n app:layout_constraintBottom_toBottomOf="parent"\n app:layout_constraintLeft_toLeftOf="parent"\n app:layout_constraintRight_toRightOf="parent"\n app:menu="@menu/botao_nav_menu" />\n\n\n</androidx.constraintlayout.widget.ConstraintLayout>\n\n<com.google.android.material.navigation.NavigationView\n android:layout_width="wrap_content"\n android:layout_height="match_parent"\n android:id="@+id/navView"\n app:headerLayout="@layout/nav_header"\n app:menu="@menu/nav_drawer_menu"\n android:layout_gravity="start"\n android:fitsSystemWindows="true"/>\n\n</androidx.drawerlayout.widget.DrawerLayout>\nRun Code Online (Sandbox Code Playgroud)\n单击时,错误被拉到该行:main_activity_bottom_navigation.setupWithNavController(pokemons_activity_nav_host.findNavController())
我找不到解决方案,有人可以帮助我吗?
\nnavController在设置之前您应该先获取。像下面这样:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
configBottomNavegacao()
configNavDrawer()
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.pokemons_activity_nav_host) as NavHostFragment
val navController = navHostFragment.navController
// Now set the navController----------------------------------------
main_activity_bottom_navigation.setupWithNavController(navController )
toggle = ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close )
drawerLayout.addDrawerListener(toggle)
toggle.syncState()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
navView.setNavigationItemSelectedListener {
when(it.itemId){
R.id.drawer_camera -> dispatchCameraIntent()
R.id.drawer_fav -> dispatchFavoritosIntent()
}
true
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5862 次 |
| 最近记录: |