如何从 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用于导航。
我想从主屏幕(使用 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用于导航。