【发布时间】:2021-02-17 15:02:05
【问题描述】:
我正在尝试用底部导航活动中的另一个片段替换一个片段。我想通过单击片段中的按钮来实现这一点。
但我收到以下错误:
java.lang.IllegalArgumentException: No view found for id 0x7f090074 for fragment
这是我的替换功能:
private fun replaceFragment(fragment: Fragment) {
val fragmentManager = childFragmentManager
fragmentManager.commit {
setReorderingAllowed(true)
replace(R.id.content, fragment)
}
}
底部导航的 XML 代码:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<fragment
android:id="@+id/home_nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/home_bottom_nav"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/home_nav" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/home_bottom_nav"
android:layout_width="match_parent"
android:layout_height="66dp"
android:background="#fff"
android:textAlignment="center"
app:itemIconTint="@drawable/home_bottom_nav_colour_selector"
app:itemTextColor="@drawable/home_bottom_nav_colour_selector"
app:labelVisibilityMode="labeled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_nav_menu" />
</androidx.constraintlayout.widget.ConstraintLayout>
FirstFragment 将被 SecondFragment 替换,FirstFragment 当前由 BottomNavigation 显示
FirstFragment()代码:
class ExpenseFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
button.setOnClickListener {
fragment = SecondFragment()
replaceFragment(fragment)
}
private fun replaceFragment(fragment: Fragment) {
val fragmentManager = childFragmentManager
fragmentManager.commit {
setReorderingAllowed(true)
replace(R.id.content, fragment)
}
}
}
我已经尝试了所有类似问题的解决方案,但我的问题仍然没有解决
【问题讨论】:
-
你试过this吗?
-
在你建议的方法中,container_id 应该是什么?它是我用于底部导航的同一个容器吗?
-
在您的底部导航活动中,您有容器,这是显示片段的视图。它通常是 xml 中的 FrameLayout 或 Fragment。请粘贴您的 xml 和 java 文件代码,并在问题中显示您尝试过的内容。
-
这是我的 xml 和 kotlin 代码
-
您的 xml 中带有 id "home_nav_host" 的片段标签是您的容器。用这个片段ID替换你的replaceFragment函数中的R.id.content
标签: java android kotlin android-fragments fragmentmanager