Android: ViewPager 简单使用

  目前本肥对 ViewPager 只有两种用法,一是当作 APP 的欢迎界面 / 引导界面,传进几个 Layout;二是传进 Fragment。

  传进 Layout:
  [1] 做两个 Layout,随便。这里取名 layout_1 和 layout_2。
  [2] 在 Activity 声明所需要的变量与组件:

private ViewPager view_pager;
private LinkedList<View> mList = new LinkedList<>();

  [3] 给 mList 增加布局:

view_pager = (ViewPager) findViewById(R.id.view_pager);

mList.add(LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_1, null));
mList.add(LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_2, null));

  [4] 写适配器:

class ViewPagerAdapter extends PagerAdapter{

        // 返回可以滑动的 View 的个数
        @Override
        public int getCount() {
            return mList.size();
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        // 将当前视图添加到 container 中并返回当前 View 视图
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(mList.get(position));
            return mList.get(position);
        }

        // 滑动切换的时候销毁当前的组件
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(mList.get(position));
        }
    }

  [5] 应用适配器:

// 设置适配器
view_pager.setAdapter(new ViewPagerAdapter());

  传进 Fragment:
  [1] 准备一个或多个 Fragment,这里取名 HomeGoodsFragment
  [2] 在 Activity 声明所需要的变量与组件:

// 需要添加进 ViewPager 的 Fragment 数组
private SparseArray<HomeGoodsFragment> fragmentList = new SparseArray<>();

  [3] 写适配器:

    // ViewPager 适配器
    private class HomeViewPagerAdatper extends FragmentPagerAdapter {

        private HomeViewPagerAdatper(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }

        @Override
        public int getCount() {
            return fragmentList.size();
        }
    }

  [4] 添加 Fragment 实例到 fragmentList:

        // 假设我要实例化 5 个 HomeGoodsFragment
        for (int i = 0; i < 5; i++) {
            HomeGoodsFragment homeGoodsFragment = fragmentList.get(i);

            // 实例化 homeGoodsFragment 并传递数据
            if (null == homeGoodsFragment) {
                homeGoodsFragment = new HomeGoodsFragment();
                Bundle bundle = new Bundle();
                bundle.putSerializable("data", "这是数据");
                bundle.putInt("position", i);
                homeGoodsFragment.setArguments(bundle);
                fragmentList.put(i, homeGoodsFragment);
            }
        }

  [5] 应用适配器:

view_pager.setAdapter(new HomeViewPagerAdatper(getFragmentManager()));