2012-08-16 74 views
2

我有一个使用代码的工作viewpager示例,我从教程中获得。本教程由Lauren Darcey和Shane Conder编写,他们显然是专家(我是Android的新手)。代码粘贴在下面。这段代码正在做的是在用户水平滑动时膨胀(提前)和破坏(后面)。只有5页。看起来,将它们全部膨胀然后让用户在没有通货膨胀/破坏的情况下进行所有的刷卡会更聪明。就像它是一个宽大的页面(例如Windows Phone 7中的Panarama和Pivot控件)。此外,如果其中一个网页上有谷歌地图,此代码就会发作。它打击了第二次通货膨胀(不知道为什么),如果他们只是一次充气,这种情况就不会发生。使用viewpager的最佳方式

有没有必要这样做的原因?有没有任何例子可以按照我的建议进行操作? 谢谢, 加里·布莱克利

private class MyPagerAdapter extends PagerAdapter { 

    public int getCount() { 
     return 5; 
    } 

    public Object instantiateItem(View collection, int position) { 

     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     int resId = 0; 
     switch (position) { 
     case 0: 
      resId = R.layout.farleft; 
      break; 
     case 1: 
      resId = R.layout.left; 
      break; 
     case 2: 
      resId = R.layout.middle; 
      break; 
     case 3: 
      resId = R.layout.right; 
      break; 
     case 4: 
      resId = R.layout.farright; 
      break; 
     } 

     View view = inflater.inflate(resId, null); 

     ((ViewPager) collection).addView(view, 0); 

     return view; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 

    } 

回答

8

您可以使用ViewPager.setOffscreenPageLimit(int)加载所有屏幕外的标签。只需通过执行((ViewPager) collection).setOffscreenPageLimit(4);((ViewPager) collection).setOffscreenPageLimit(getCount() - 1);将其设置为4(即总计5个,减1可见)。

请记住这一点的内存影响;如果你不小心,将所有加载的东西都放在设备的内存中。

+0

Eric,那么工作得很好!它每页膨胀一次,滚动快速而平稳。之后,instantiateItem再也不会被调用。谢谢。 – 2012-08-17 17:58:41

+5

“只需将其设置为4(总共5个,减1可见)”是不正确的。如果数字设置为4,则页面足够多时将加载9页,因为ViewPager将在当前页面的任一侧保留4页。请参阅文档http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit \(int \) – 2012-11-16 10:59:40

+2

@Leoguo是的,它是正确的。总共只有5页。加载9没有意义;没有9页要加载。相反,操作系统会将所有ViewPager的页面加载到内存中,除非当前页面(只要您更改页面就存储),这样就不会重新创建它们。 – Eric 2012-11-16 16:51:46