相关疑难解决方法(0)

导航组件:找不到 NavController

我正在使用导航组件在我的应用程序中导航。它在片段内工作正常,但无法在包含实际导航主机的活动中找到导航主机。

当用户单击 FAB 时,我试图打开一个新片段,我将其包含在主要活动的 XML 中。当我调用 findNavController() 时,它找不到控制器。导航主机控制器位于 XML 布局中。我不明白为什么它找不到它。

主要活动

class MainActivity : AppCompatActivity(), OnActivityComponentRequest {
    override fun getTabLayout(): TabLayout {
        return this.tabLayout
    }

    override fun getFap(): FloatingActionButton {
        return this.floatingActionButton
    }

    private lateinit var tabLayout: TabLayout
    private lateinit var floatingActionButton: FloatingActionButton

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)
        this.tabLayout = tabs
        this.floatingActionButton = fab

        fab.setOnClickListener {

         it.findNavController().navigate(R.id.addNewWorkoutFragment)

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

活动主 XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
        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:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".domain.MainActivity"
        android:animateLayoutChanges="true">

    <com.google.android.material.appbar.AppBarLayout
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:theme="@style/AppTheme.AppBarOverlay"> …
Run Code Online (Sandbox Code Playgroud)

navigation android android-jetpack

19
推荐指数
3
解决办法
4万
查看次数

在另一个片段中定义 NavHostFragment

我有一个片段,我在其中定义了一个 NavHostFragment,如下所示:

<fragment
        android:id="@+id/shipping_host_nav"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/shipping_nav_graph"
        app:defaultNavHost="true"/>
Run Code Online (Sandbox Code Playgroud)

当试图在片段中调用 findNavController 方法时,它抛出了一个非法状态异常,并说我的视图组没有 NavController。

    java.lang.IllegalStateException: View androidx.core.widget.NestedScrollView{1dd5506 VFED..... ......I. 0,0-0,0} does not have a NavController set
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:我可以在另一个片段中定义一个 NavHostFragment 吗?还是只适合活动? 我已经搜索了很多找到我可以在另一个片段中定义一个导航主机片段,但我没有找到任何答案。

android android-navigation android-architecture-navigation android-navigation-graph

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