Viewpager内存不足?

时间:2014-03-13 21:26:08

标签: android android-viewpager android-view android-pageradapter

首先,我没有收到任何错误。我的问题是我在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找到的视图。这是我基于this 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页和第0页中看到等效的RelativeLayouts。 1但是第2页和第2页3总是空的。

  • 你知道为什么会这样吗?
  • 是因为内存限制吗?
  • 或者我的另一个假设是第2页&amp; 3从未被夸大,因为onCreate instantiateItem()只运行前两个。 (由System.out.println(position);打出,打印0&amp; 1)。

1 个答案:

答案 0 :(得分:0)

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

您可以使用:pager.setOffscreenPageLimit(X);

进行更改

其中&#39; X&#39;是页数。