初学使用ViewPager组件

ViewPager组件的作用是实现左右横划换页,如下图所示(图片来源于网络)

这里写图片描述这里写图片描述
需要的组件:
1)main.XML中需要加载ViewPager还有PagerTabStrip
PagerTabStrip的作用相当于每页的标题,如图中的热门商区,热门分类
代码如下:

<android.support.v4.view.ViewPager
         android:id="@+id/pager"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center">

     <android.support.v4.view.PagerTabStrip
         android:id="@+id/tab"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="top"></android.support.v4.view.PagerTabStrip>
    </android.support.v4.view.ViewPager>

2)XML中还需要加入页面,相当于在这些页面中换页 ,等等需要好几个页面(复制粘贴贴了4个)

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="第一个界面"/>

3)编写pager的适配器的类

public class MyPageAdapter extends PagerAdapter{
    private List<View>VL;
    private List<String>TL;

    public MyPageAdapter(List<View>vl,List<String>tl){
        this.VL=vl;
        this.TL=tl;
    }

    //相当于是返回的页卡数量
    @Override
    public int getCount() {
        return VL.size ();
    }
    //View是否来来自于这个对象
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }
    //实例化一个页卡
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView (VL.get(position));
        return VL.get (position);
    }
    //销毁一个页卡
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
       container.removeView (VL.get (position));
    }
    //设置Pager标题
    @Override
    public CharSequence getPageTitle(int position) {
        return TL.get (position);
    }
}

4)为了练习fragment,多写了一个fragment的适配器的类,他和pageradapter相比少了销毁页卡等的一点点功能

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment>FL;
    private List<String>TL;
    public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment>DL,List<String >TL) {
        super (fm);
        this.FL=DL;
        this.TL=TL;
    }
    @Override
    public Fragment getItem(int position) {
        return FL.get(position);
    }
    @Override
    public int getCount() {
        return FL.size ();
    }
}

5)多写几个fragment的类,作为数据源传入fragmentList

public class Fragment1 extends android.support.v4.app.Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate (R.layout.view1,container,false);
    }
}

6)MainActivity中:

public class MainActivity extends FragmentActivity {
    private List<View>VL;
    private ViewPager VP;
    private PagerTabStrip tab;
    private List<String>TL;
    private List<Fragment>FL;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.main);
        //VL存放View数据源.通过View对象座位数据源建立适配器(pageadap)
        VL=new ArrayList<View> ();
        //titlelist为页卡设置标题
        TL=new ArrayList<String> ();
        View view1=View.inflate (this,R.layout.view1,null);
        View view2=View.inflate (this,R.layout.view2,null);
        View view3=View.inflate (this,R.layout.view3,null);
        View view4=View.inflate (this,R.layout.view4,null);
        VL.add (view1);
        VL.add (view2);
        VL.add (view3);
        VL.add (view4);
        TL.add ("第一页");
        TL.add ("第二页");
        TL.add ("第三页");
        TL.add ("第四页");
        //为pagertitle设置属性
        tab= (PagerTabStrip) findViewById (R.id.tab);
        tab.setBackgroundColor (Color.WHITE);
        tab.setTextColor (Color.RED);
        tab.setDrawFullUnderline (false);
        tab.setTabIndicatorColor (Color.GREEN);

        //通过fragment作为数据源
        FL=new ArrayList<> ();
        FL.add (new Fragment1());
        FL.add (new Fragment2());
        FL.add (new Fragment3());
        FL.add (new Fragment4());
        VP= (ViewPager) findViewById (R.id.pager);
        //新建一个适配器
        MyPageAdapter adapter=new MyPageAdapter (VL,TL);
        //给ViewPager加载适配器
       // VP.setAdapter (adapter);
        MyFragmentPagerAdapter adapter1=new MyFragmentPagerAdapter (getSupportFragmentManager (),FL,TL);
        VP.setAdapter (adapter);
    }
}

猜你喜欢

转载自blog.csdn.net/rikkatheworld/article/details/78128434