1

我有一个片段名称是HomeNavHostFragment và trong layout của nó tôi có chứa một FragmentContainerView:我有一个名为HomeNavHostFragment的片段,它的布局包含一个FragmentContainerView 特别是我的代码片段如下:

科特林代码:

class HomeNavHostFragment : BaseFragment<FragmentHomeNavHostBinding, HomeNavHostViewModel>() {


    override val layoutResourceId: Int = R.layout.fragment_home_nav_host
    override val classTypeOfViewModel: Class<HomeNavHostViewModel> =
        HomeNavHostViewModel::class.java
    override val nestedNavHostFragmentId: Int = R.id.nested_nav_host_fragment_home
    override val navGraphId: Int = R.navigation.nav_graph_home

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val mainNavController =
            Navigation.findNavController(requireActivity(), R.id.nav_host_fragment)

        val nestedNavHostFragment =
            childFragmentManager.findFragmentById(nestedNavHostFragmentId) as? NavHostFragment
        navController = nestedNavHostFragment?.navController


        listenOnBackPressed()

    }
    @SuppressLint("BinaryOperationInTimber")
    override fun initView() {
        super.initView()
    }


}

fragment_navhost_home.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/nested_nav_host_fragment_home"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:defaultNavHost="false"
            app:navGraph="@navigation/nav_graph_home" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

nav_graph_home.xml:

<?xml version="1.0" encoding="utf-8"?>
<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/fragment_nav_host_home"
    app:startDestination="@id/home_fragment">


    <fragment
        android:id="@+id/home_fragment"
        android:name="com.apps.ultrawallpapers.view.home.HomeFragment"
        android:label="fragment_home"
        tools:layout="@layout/fragment_home" />

</navigation>

我面临一个问题,我在 HomeNavHostFragment 中有一个数据需要发送到 HomeFragment 但我不知道该怎么做,即使我在 HomeNavHostFragment 的 onViewCreated() 中尝试了以下代码,但它无法解决那里的问题,所以有人可以帮我解决这个问题。

     var bundle = bundleOf("KEY" to "SAMPLE")

     mainNavController.setGraph(R.navigation.nav_graph_home,bundle)

我的示例遵循此链接中的说明: 示例

编辑

在Arpit Shukla的帮助下,我设法解决了这个问题,部分原因是我自己缺乏它,解决这个问题的方法是:删除 app:navGraph="@navigation/nav_graph_homefragment_navhost_home.xml 和HomeNavHostFragmentonViewCreated中的行,您需要添加以下代码:

 var bundle = bundleOf("KEY" to "SAMPLE")
 navController?.setGraph(R.navigation.nav_graph_home,bundle)

4

0 回答 0