Android TabLayout阻止激活与选定项相邻的选项卡

时间:2018-07-12 00:54:40

标签: android xamarin.android android-tablayout

我有一个基于标签的应用程序。我为我的选项卡使用一个TabLayout,并为FragmentStatePagerAdapter的子类实例化所选选项卡的片段。我已禁止在标签之间滑动。我仍然看到一个回调,用于为与所选标签相邻的标签创建片段。换句话说,如果索引0的选项卡被激活,我还将看到索引1的选项卡的GetItem回调。

我想禁用该行为。换句话说,它只应为活动选项卡请求一个片段。有可能吗?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/root">
    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabPaddingStart="0dp"
        app:tabPaddingEnd="0dp"
        app:tabPaddingTop="0dp"
        app:tabMode="fixed"
        app:tabGravity="fill" />
    <jockusch.calculator.droid.AndroidViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

发生这种情况的原因是由于您使用ViewPager。

ViewPager默认情况下将自动创建相邻的Fragment,因为这使用户可以在需要时向其滑动。仅在准备好滑动时才创建它们,可能会导致延迟或某些不愉快的视觉效果。

ViewPager有一个名为setOffscreenPageLimit(int limit)的方法,该方法可以限制它在内存中保留的相邻数量,但是我认为由于ViewPager的固有行为,无法将其减小为0。

如果您已经禁用了在选项卡之间滑动,那么听起来您想要的不是ViewPager。考虑只使用FragmentTransactions替换活动的Fragment。

答案 1 :(得分:0)

viewPager.setOffscreenPageLimit(0)

是您要寻找的。 但是ViewPager不允许屏幕外限制小于1。

source

使用除viewPager以外的其他方法来获得所需的效果。不使用viewPager的一种方法是改为使用frameLayout,并在选择选项卡时膨胀一个新片段并销毁前一个片段。