0

首先,我没有收到任何错误。我的问题是我在 ViewPager 中看不到第 2 和第 3 页(共 4 页)。让我解释:

首先,我直接在布局中添加页面,没有片段:

<android.support.v4.view.ViewPager
    android:id="@+id/drawerPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
        android:id="@+id/page_start_one"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" >

        //3 textviews, 1 imageview
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/page_start_two"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" >

        //1 textview, 1 imageview
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/page_start_three"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" >

        //1 textview, 1 imageview
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/page_start_four"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" >

        //3 textviews, 1 button
    </RelativeLayout>
</android.support.v4.view.ViewPager>

我这样做是为了简单。现在我将寻呼机适配器加载到活动中:

WizardPagerAdapter adapter = new WizardPagerAdapter();
ViewPager pager = (ViewPager) findViewById(R.id.drawerPager);
pager.setAdapter(adapter);

当然还有定义WizardPagerAdapter。您将在下面看到destroyItem()它什么都不做,instantiateItem()只是返回由 id 找到的视图。这是我基于这个 SO question的代码:

class WizardPagerAdapter extends PagerAdapter {

    public RelativeLayout instantiateItem(View collection, int position) {

        System.out.println(position);
        int resId = 0;
        switch (position) {
        case 0:
            resId = R.id.page_start_one;
            break;
        case 1:
            resId = R.id.page_start_two;
            break;
        case 2:
            resId = R.id.page_start_three;
            break;
        case 3:
            resId = R.id.page_start_four;
            break;
        }

        return (RelativeLayout) findViewById(resId);
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
    }

    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);
    }
}

正如我之前所说,使用此代码我只能在第 0 和第 1 页中看到等效的 RelativeLayouts,但第 2 和第 3 页始终是空的。

  • 你知道为什么会这样吗?
  • 是因为内存限制吗?
  • 或者我的另一个假设是第 2 页和第 3 页从未被夸大过,因为 onCreateinstantiateItem()仅针对前两个运行。(通过System.out.println(position);打印 0 和 1 窃听)。
4

1 回答 1

0

可能是因为 viewpager 默认只缓存 2 个页面

你可以改变它: pager.setOffscreenPageLimit(X);

其中“X”是页数。

于 2014-10-16T10:48:30.213 回答