TabLayout 和 ViewPager 在 Orientation Change 后消失
TabLayout and ViewPager disappearing after Orientation Change
目前,我正在开发对不同方向的支持。我的横向布局有一个 viewpager 和 tablayout,而纵向布局只有一个片段。当我以任何方向启动应用程序时,布局都可以正常工作。然而,当方向在运行时改变时,在这种情况下从纵向到横向,viewpager 和 tablayout 完全从屏幕上消失,只留下父级高度和宽度的片段,即使分配了权重。
这让我相信布局没有正确改变。我的清单也没有应用 android:configurations。否则,当我改变它们的方向时,其他活动和片段工作正常。出于某种原因,只有这个不起作用。我将在下面附上 XML 代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:id="@+id/drawer"
tools:context=".HomeActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
tools:ignore="UselessParent">
<fragment
android:id="@+id/none"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="fragment_tag"
android:name="com.example.trackeths.HomeFragment" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="fill"
app:tabMode="fixed"
app:tabTextColor="#fff"
app:tabIndicatorColor="#fff"
android:background="@color/colorPrimaryDark"
/>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewPager"/>
</LinearLayout>
发布此问题后,突然顿悟,它可能是一个持久性片段,覆盖了我的布局(即由于 savedInstanceState,从纵向模式堆栈到横向模式的片段)。
因此,将超级调用更改为空。
super.onCreate(null);
从 Fool-proof way to handle Fragment on orientation change 那里得到灵感,如果有人感兴趣或者像我一样不熟悉片段。
目前,我正在开发对不同方向的支持。我的横向布局有一个 viewpager 和 tablayout,而纵向布局只有一个片段。当我以任何方向启动应用程序时,布局都可以正常工作。然而,当方向在运行时改变时,在这种情况下从纵向到横向,viewpager 和 tablayout 完全从屏幕上消失,只留下父级高度和宽度的片段,即使分配了权重。
这让我相信布局没有正确改变。我的清单也没有应用 android:configurations。否则,当我改变它们的方向时,其他活动和片段工作正常。出于某种原因,只有这个不起作用。我将在下面附上 XML 代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:id="@+id/drawer"
tools:context=".HomeActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
tools:ignore="UselessParent">
<fragment
android:id="@+id/none"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="fragment_tag"
android:name="com.example.trackeths.HomeFragment" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="fill"
app:tabMode="fixed"
app:tabTextColor="#fff"
app:tabIndicatorColor="#fff"
android:background="@color/colorPrimaryDark"
/>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewPager"/>
</LinearLayout>
发布此问题后,突然顿悟,它可能是一个持久性片段,覆盖了我的布局(即由于 savedInstanceState,从纵向模式堆栈到横向模式的片段)。
因此,将超级调用更改为空。
super.onCreate(null);
从 Fool-proof way to handle Fragment on orientation change 那里得到灵感,如果有人感兴趣或者像我一样不熟悉片段。