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

Posted

技术标签:

【中文标题】如何从(和替换)TabLayout 和 ViewPager 移动到新片段?【英文标题】:How to move from (and replace) TabLayout and ViewPager to a new fragment? 【发布时间】:2021-05-08 12:51:11 【问题描述】:

我想从我的主屏幕(使用 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_
android:layout_
tools:context=".MainActivity">

<com.google.android.material.appbar.AppBarLayout
    android:layout_
    android:layout_
    android:theme="@style/Theme.MyApp.AppBarOverlay">

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

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        android:layout_
        android:layout_
        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_
    android:layout_
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

【问题讨论】:

有点难理解你的问题,添加一些代码让你的问题更容易理解 也许你应该考虑创建一个新的Activity 并导航到它。我知道 Google 开发人员建议使用单个 Activity,但这条规则也有例外。 【参考方案1】:

我找到了解决办法:

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

另一种解决方案是将 activity_main.xml 的内容移动到新的 Fragment 中并使用 nav_graph.xml 进行导航。

【讨论】:

能否详细说明您找到的解决方案?

以上是关于如何从(和替换)TabLayout 和 ViewPager 移动到新片段?的主要内容,如果未能解决你的问题,请参考以下文章

带有片段的 NavigationDrawer 内的 Android TabLayout

如何使用 TabLayout 将数据从 Activity 传递到 Fragment

如何更改新的 TabLayout 指示器颜色和高度

硅谷新闻8--TabLayout替换ViewPagerIndicator

通过调用 popBackStackImmediate 返回到 tablayout 中的替换片段时调用哪个方法

如何从片段更改 Tablayout 的背景颜色?