gpt4 book ai didi

android - 导航组件 : Cannot find NavController

转载 作者:行者123 更新时间:2023-12-03 13:25:13 26 4
gpt4 key购买 nike

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

当用户单击 FAB 时,我试图打开一个新 fragment ,该 fragment 包含在主要 Activity 的 XML 中。当我调用 findNavController() 时,它找不到 Controller 。导航主机 Controller 位于 XML 布局中。我不明白为什么它找不到它。

主要 Activity

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)

}
}
}

Activity 主要 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">

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay"/>

<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<com.google.android.material.tabs.TabItem
android:text="Test 1"
android:layout_height="match_parent"
android:layout_width="match_parent"/>

<com.google.android.material.tabs.TabItem
android:text="Test 2"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</com.google.android.material.tabs.TabLayout>

</com.google.android.material.appbar.AppBarLayout>

<fragment
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/main_navigation" />


<com.google.android.material.bottomappbar.BottomAppBar
android:id="@+id/bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"/>


<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchorGravity="right|top"
app:layout_anchor="@+id/bar"
android:src="@drawable/ic_add_black_24dp"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

最佳答案

在我设法以这种方式获取 navController 之前,我遇到了同样的异常:

val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_fragment_container_view_id) as NavHostFragment
val navController = navHostFragment.navController
从此获得 answer :
在找到导航 Controller 之前,如果您使用绑定(bind),您需要设置 View :
binding = BaseLayoutBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
如果不:
setContentView(R.layout.activity_main)
对 fragment 使用相应的绑定(bind)。

关于android - 导航组件 : Cannot find NavController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53902494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com