代码之家  ›  专栏  ›  技术社区  ›  William Jockusch

android tablayout防止激活所选选项卡旁边的选项卡

  •  0
  • William Jockusch  · 技术社区  · 6 年前

    我有一个基于标签的应用程序。我使用我的选项卡的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 回复  |  直到 6 年前
        1
  •  1
  •   Jackey    6 年前

    发生这种情况的原因是您使用了viewpager。

    默认情况下,viewpager将自动创建相邻的片段,因为这允许用户在需要时对其进行滑动。只有当它们准备好刷卡时才创建它们可能会导致延迟或一些不愉快的视觉效果。

    viewpager有一个名为 setOffscreenPageLimit(int limit) 这可以限制它在内存中保存的相邻的数量,但是我认为由于viewpager的固有行为,不可能将其减少到0。

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

        2
  •  0
  •   RoyalGriffin Abhay Koradiya    6 年前
    viewPager.setOffscreenPageLimit(0)
    

    是你要找的。 但viewpager不允许屏幕外限制小于1。

    source

    使用除viewpager以外的其他工具来获得所需的效果。在没有viewpager的情况下,一种方法是使用framelayout来代替它,并在选中一个选项卡时膨胀一个新片段并销毁前一个片段。