如何从 TabLayout 和 ViewPager 移动(并替换)到新片段?

How to move from (and replace) TabLayout and ViewPager to a new fragment?

我想从主屏幕(使用 TabLayout 和 ViewPager)导航到新片段(不是选项卡)。

我希望我的新片段完全覆盖屏幕(而不是 ViewPager 的一部分)。

您可以在下面看到主屏幕(上半部分)的外观,它有 4 个选项卡。

这是主片段之上的新片段的样子。从主屏幕点击“研究”后显示。如您所见,TabLayout 和ViewPager 不再显示。

换句话说,当我在主屏幕(有一个 TabLayout 和 ViewPager)中执行一个操作(例如单击 Study)时,我想显示一个覆盖整个屏幕的新片段(包括TabLayout 和 ViewPager)。我不希望这个新片段成为 TabLayout 和 ViewPager 中的新选项卡,也不希望新片段替换另一个选项卡。我希望新片段完全取代之前在屏幕上显示的片段。

如果这有助于理解问题,请看我的 activity_main.xml(主屏幕)的样子(不是照片中的那个)。我想从这里移动到一个新片段,并用新片段完全替换这个 activity_main.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=".MainActivity">

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/Theme.MyApp.AppBarOverlay">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/my_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary" />

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        app:tabSelectedTextColor="@android:color/white"
        app:tabTextColor="@android:color/darker_gray" />
</com.google.android.material.appbar.AppBarLayout>

<androidx.viewpager.widget.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

我找到了解决方案:

val trans = supportFragmentManager.beginTransaction()
trans.replace(android.R.id.content, MyNewFragment())
trans.addToBackStack(null)
trans.commit()

另一个解决方案是将 activity_main.xml 的内容移动到一个新的片段中,并使用 nav_graph.xml用于导航。