我有一个基于标签的应用程序。我为我的选项卡使用一个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>
答案 0 :(得分:1)
发生这种情况的原因是由于您使用ViewPager。
ViewPager默认情况下将自动创建相邻的Fragment,因为这使用户可以在需要时向其滑动。仅在准备好滑动时才创建它们,可能会导致延迟或某些不愉快的视觉效果。
ViewPager有一个名为setOffscreenPageLimit(int limit)
的方法,该方法可以限制它在内存中保留的相邻数量,但是我认为由于ViewPager的固有行为,无法将其减小为0。
如果您已经禁用了在选项卡之间滑动,那么听起来您想要的不是ViewPager。考虑只使用FragmentTransactions替换活动的Fragment。
答案 1 :(得分:0)
viewPager.setOffscreenPageLimit(0)
是您要寻找的。 但是ViewPager不允许屏幕外限制小于1。
使用除viewPager以外的其他方法来获得所需的效果。不使用viewPager的一种方法是改为使用frameLayout,并在选择选项卡时膨胀一个新片段并销毁前一个片段。