0

首先我没有得到任何错误。我的问题是我在ViewPager中看不到页面(012)。让我来解释:Viewpager内存不足?

首先我直接添加里面的布置页面,而无需片段:

<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 & 1页相当于RelativeLayouts但2页& 3总是空的。

  • 你知道为什么会发生这种情况吗?
  • 是否因为内存限制?
  • 或者我的另一个假设是页面2 & 3从来没有被夸大,因为onCreate instantiateItem()只运行前两个。 (由System.out.println(position);嗤之以鼻,打印0 & 1)。

回答

0

这是probly因为viewpager仅缓存2页默认

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

其中 'x' 是页面的数量。