【问题标题】:ViewPager doesnt' work properly with TabLayoutViewPager 不能与 TabLayout 一起正常工作
【发布时间】:2016-07-19 13:47:35
【问题描述】:

我有下一个布局的片段

<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.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="54dp"
        app:tabGravity="center"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@android:color/white"
        app:tabTextColor="@color/tab_color"
        app:tabIndicatorHeight="3dp"
        app:tabTextAppearance="@style/Discover.TextAppearance.Tab"/>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    </FrameLayout>
</LinearLayout>

当我冷启动应用程序时,我会看到正确的 TabLayout,其中包含所有需要的选项卡和 2 个首页进入 viewpager(为 viewpager 设置偏移限制 1)。

在我将 ViewPager 滑动到 3 页后,我什么也看不到。 ViewPager 中似乎缺少片段,但我看到日志和片段工作正常。

如果我将应用程序发送到后台并返回,所有页面都将可见。

如果我删除 tablayout 并删除所有缓存,则此错误不会重复。

初始化代码:

final TabLayout tabs = (TabLayout) view.findById(R.id.tabs);
final ViewPager page = (ViewPager) view.findById(R.id.pager);
final DataAdapter adapter = new DataAdapter(someData);
page.setAdapter(adapter);

tabs.setupWithViewPager(page);

【问题讨论】:

  • 使用 coordinatorLayout 作为 root 而不是 LinearLayout
  • @bryanc,我试过了,结果是一样的。
  • 如果你有 3 页,为什么要设置偏移限制 1? viewpager 现在只缓存 2 个页面
  • @bryanc,我有超过 3 页。第三页和所有下一页将不可见。我使用限制 1 来减少应用程序中的内存使用。你不会用这个技巧吗?
  • 我保留默认设置认为只缓存 3 页似乎您的寻呼机适配器可能会导致这种情况。

标签: android android-design-library android-tablayout


【解决方案1】:

你能传递更多代码吗?你应该考虑RelativeLayout,跳过FrameLayout。

【讨论】: