相关疑难解决方法(0)

如何修复 MainActivity 没有导航控制器?

我刚刚编译了我的代码,当我尝试启动应用程序时,我收到了错误消息。我目前正在尝试为我的班级项目设置 RecycleView。我的目标是让 RecycleView 显示类似于 reddit 移动应用程序的内容。我以为我的名为“scrollview1”的 RecycleView 有一个导航控制器设置。不知道为什么我得到这个输出

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.john.chanapi/com.john.chanapi.MainActivity}: java.lang.IllegalStateException: Activity com.john.chanapi.MainActivity@1850938 does not have a NavController set on 2131230866
Run Code Online (Sandbox Code Playgroud)

我的 MainActivity.kt:

package com.john.chanapi

import android.os.Bundle
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.Snackbar
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.navigation.NavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import android.view.Menu
import android.view.View

class MainActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val toolbar: Toolbar = findViewById(R.id.toolbar)
        setSupportActionBar(toolbar) …
Run Code Online (Sandbox Code Playgroud)

android kotlin

21
推荐指数
3
解决办法
1万
查看次数

IllegalStateException:链接没有NavController集

我正在使用Android导航组件进行导航.我有一个LoginFragment,它有一个按钮可以转换到SignUpFragment.单击按钮我收到此错误.

java.lang.IllegalStateException: View android.support.v7.widget.AppCompatButton{49d9bd1 VFED..C.. ...P.... 201,917-782,1061 #7f090172 app:id/signUpLink} does not have a NavController set
Run Code Online (Sandbox Code Playgroud)

这是我的nav_graph.xml

<navigation xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        app:startDestination="@id/loginFragment">
        <fragment
            android:id="@+id/loginFragment"
            android:name="org.fossasia.openevent.app.core.auth.login.LoginFragment"
            android:label="login_fragment"
            tools:layout="@layout/login_fragment">
            <action
                android:id="@+id/action_loginFragment_to_signUpFragment"
                app:destination="@id/signUpFragment" />

        </fragment>
    </navigation>
Run Code Online (Sandbox Code Playgroud)

以下是LoginFragment for Navigation中的代码 -

binding.signUpLink.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_signUpFragment, null));
Run Code Online (Sandbox Code Playgroud)

以下是NavHostFragment的活动布局文件的摘录 -

<FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:name="android.navigation.fragment.NavHostFragment"
            app:navGraph="@navigation/main_navigation"
            app:defaultNavHost="true"/>
Run Code Online (Sandbox Code Playgroud)

android android-architecture-components android-architecture-navigation

15
推荐指数
11
解决办法
1万
查看次数

在调用 getGraph() 之前必须先调用 setGraph()

我有底部导航,我也<fragment>FragmentContainerView它替换了标签,这给了我关于它没有设置 NavController 的错误,然后我发布了这个问题并解决了这个问题,但是当方向改变并选择项目时,我得到了以下错误在底部导航

java.lang.IllegalStateException: 在调用 getGraph() 之前必须先调用 setGraph()

片段容器

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/mobile_navigation" /
Run Code Online (Sandbox Code Playgroud)

寻找片段

val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
    val navController = navHostFragment.navController
    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    val appBarConfiguration = AppBarConfiguration(
        setOf(
            R.id.navigation_classes, R.id.navigation_schedule, R.id.navigation_settings
        )
    )
    setupActionBarWithNavController(navController, appBarConfiguration)
    navView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)

android orientation-changes android-fragments bottomnavigationview

12
推荐指数
4
解决办法
5007
查看次数

IllegalStateException:活动没有设置 NavController

我尝试编写一个 Android 应用程序,它使用 androidx 中的导航组件、工具栏和抽屉布局来从左侧滑入设置菜单。我按照导航组件入门指南进行操作,并尝试使用本指南使用 NavigationUI 更新 UI 组件来添加顶部应用栏和设置。

当我的应用程序启动时,会引发以下异常:

java.lang.IllegalStateException: Activity ....MainActivity@e686cd8 does not have a NavController set on 2131230993
Run Code Online (Sandbox Code Playgroud)

旁注:如果我nav_graph.xml在设计模式下打开,主机窗格会报告“未找到 NavHostFragments。必须从布局中的 NavHostFragment 引用此导航图才能访问。” 也许这个错误和异常是相关的并且具有相同的根本原因。然而,我的导航图被一个虽然引用NavHostFragment,见下文。

活动_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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/drawer_layout"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:fitsSystemWindows="true"
  tools:context=".MainActivity">

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="?attr/actionBarTheme" />

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />
  </LinearLayout>

  <com.google.android.material.navigation.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_view"
    app:headerLayout="@layout/nav_header" />
</androidx.drawerlayout.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

这个布局 …

android android-fragments navigation-drawer android-architecture-components android-architecture-navigation

7
推荐指数
1
解决办法
6699
查看次数

使用视图绑定导航

我正在尝试使用视图绑定替换所有 findViewById。但是,我无法使用View Binding更改 NavController 代码行。

val navController = findNavController(this, R.id.mainHostFragment)
Run Code Online (Sandbox Code Playgroud)

var binding : ActivityMainBinding
val navController = findNavController(this, binding.mainHostFragment)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

android-navigation android-viewbinding

5
推荐指数
1
解决办法
4378
查看次数

空 NavHostFragment/NavController 与 FragmentContainerView

预期的

\n\n

使用导航 UI 创建底部应用程序栏导航BottomNavigationViewFragmentContainerView类似于示例应用程序NavigationAdvancedSample

\n\n

请注意,NavigationAndvancedSample应用程序似乎没有使用文档中描述的相同实现,因为它有一个使用自定义扩展方法的解决方法实现setupWithNavController

\n\n

观察到的

\n\n

使用.在MainActivity.ktNavHostFragment中创建 时为 Null 。BottomNavigationViewFragmentContainerView

\n\n

可重现的错误和完整的代码示例可在BottomNavigationViewSample存储库中找到。

\n\n

错误

\n\n
\n

2020-05-15 12:39:19.117 18747-18747/com.example.bottomnavigationviewsample E/AndroidRuntime: 致命异常: main\n 进程: com.example.bottomnavigationviewsample, PID: 18747\n java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.bottomnavigationviewsample/com.example.bottomnavigationviewsample.MainActivity}:kotlin.TypeCastException:null 无法转换为非 null 类型 androidx.navigation.fragment.NavHostFragment\n 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)\n 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)\n 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java :83)\n 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\n 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\n 在 android.app.ActivityThread$ H.handleMessage(ActivityThread.java:2016)\n 在 android.os.Handler.dispatchMessage(Handler.java:107)\n 在 android.os.Looper.loop(Looper.java:214)\n 在 android.app .ActivityThread.main(ActivityThread.java:7356)\n 在 …

android android-fragments android-navigation android-architecture-navigation android-bottomappbar

5
推荐指数
1
解决办法
6442
查看次数

使用 &lt;FragmentContainerView&gt; 代替 &lt;fragment&gt; 会导致应用程序在使用 BottomNav 和 jetpack 导航时崩溃

我正在创建一个带有 BottomNavigationView 的应用程序。

我正在使用 JetpackNavigation 和 kotlin。

我已将 XML 设置为

<fragment
        android:id="@+id/fragNavHost"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@+id/bottomNavView"
        app:navGraph="@navigation/bottom_nav_graph"
        tools:layout_editor_absoluteX="0dp" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/bottom_nav_menu">
Run Code Online (Sandbox Code Playgroud)

但我Replace the <fragment> tag with FragmentContainerView.从 Android Studio 建议中收到一条建议消息

该应用程序在使用 FragmentContainerView 时中断,但在使用 Fragment 时完美运行

我收到的错误是

Unable to start activity ComponentInfo{com.example.reportbusterclone/com.example.reportbusterclone.view.MainActivity}: java.lang.IllegalStateException: Activity com.example.reportbusterclone.view.MainActivity@f462d5a does not have a NavController set on 2131296446
Run Code Online (Sandbox Code Playgroud)

即使只有标签发生变化而没有其他变化。

android android-fragments kotlin android-jetpack-navigation

5
推荐指数
0
解决办法
235
查看次数

通过使用 FragmentContainerView 标签将导航组件与底部导航栏结合使用

我已经看过这个问题:FragmentContainerView using findNavController关于这个问题。但我仍然无法解决问题。它永远不会打开其他片段。我想也许是因为视图绑定,但我尝试在不使用视图绑定的情况下再次执行此操作。还没开啊

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    private lateinit var navController: NavController
    private lateinit var navHostFragment: NavHostFragment

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        val navHostFragment =
            supportFragmentManager.findFragmentById(R.id.main_nav_host_fragment) as NavHostFragment
        navController = navHostFragment.navController
        binding.bottomNavigationView.setupWithNavController(navController)
        
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.home -> {
                navHostFragment.navController.popBackStack()
                return true
            }
        }
        return super.onOptionsItemSelected(item)
    }
}
Run Code Online (Sandbox Code Playgroud)

活动主文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    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" …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-studio android-architecture-navigation

1
推荐指数
1
解决办法
6101
查看次数