我有一个片段名称是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_home
fragment_navhost_home.xml 和HomeNavHostFragment的onViewCreated中的行,您需要添加以下代码:
var bundle = bundleOf("KEY" to "SAMPLE")
navController?.setGraph(R.navigation.nav_graph_home,bundle)