使用viewpager的最佳方式

Dea*_*ely 2 android android-viewpager

我有一个工作的viewpager示例,使用我从教程中获得的代码.该教程由Lauren Darcey和Shane Conder编写,他们显然是专家(我是Android新手).代码粘贴在下面.当用户水平滑动时,此代码正在做的是膨胀(前进)和销毁(后面).只有5页.似乎将它们全部膨胀会更聪明,然后让用户进行所有刷卡而不进行充气/破坏.就像它是一个大的宽页面(例如Windows Phone 7中的Panarama和Pivot控件).

此外,如果其中一个页面上有谷歌地图,则此代码会爆炸.它吹响了第二次通货膨胀(不知道为什么),如果它们只是一次充气就不会发生这种情况.

是否有必要以这种方式完成的原因?按照我建议的方式有没有可用的例子?谢谢,加里布莱克利

    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);

    }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 9

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

请记住这个记忆的含义; 如果你不小心,加载所有东西将会耗尽设备的RAM.

  • "只需将其设置为4(总共5个,减去1可见)"是不正确的.如果数字设置为4,如果页面足够,将加载9页,因为ViewPager将在当前页面的任一侧保留4页.请参阅文档http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit \(int \) (5认同)
  • @Leoguo是的,这是对的.总共只有5页.装载9没有意义; 没有9页需要加载.相反,操作系统将所有`ViewPager`的页面(除了当前,在您更改页面后立即存储)加载到内存中,以便不会重新创建它们. (2认同)