ViewPager+PagerTabStrip实现页面选项卡滑动

经过一个简单的Demo,基本上做出了个可以实现功能的滑动页面,但是这个东西复用性差,而且还有一些小bug,不喜欢,再改!

      

/*
* 功能:改进滑动页面效果* 作者:刘慧超* 时间:2015年11月16日01:18:07
* */
public class Main2Activity extends AppCompatActivity {

    ViewPager pager=null;
PagerTabStrip tabStrip=null;
ArrayList<View> viewContainter=new ArrayList<View>();//tab对应的视图
ArrayList<String> titleContainer=new ArrayList<String>(){};//tab的标题
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.content_main2);
pager=(ViewPager)findViewById(R.id.viewpagerTwo);
tabStrip=(PagerTabStrip)this.findViewById(R.id.tabstripTwo);
View view1= LayoutInflater.from(this).inflate(R.layout.tab1,null);
View view2=LayoutInflater.from(this).inflate(R.layout.tab2,null);
View view3=LayoutInflater.from(this).inflate(R.layout.tab3,null);
//从ViewPager开始添加View
viewContainter.add(view1);
viewContainter.add(view2);
viewContainter.add(view3);
//页签项
titleContainer.add("第一项");
titleContainer.add("第二项");
titleContainer.add("第三项");
pager.setAdapter(new TestPagerAdapter(viewContainter, titleContainer));
pager.setOnPageChangeListener(new TestOnPageChangeListener());
}


    /*继承OnPageChangeListener*/
public class TestOnPageChangeListener implements ViewPager.OnPageChangeListener {

        @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
public void onPageSelected(int position) {
            switch (position){
                case 0:
                    Toast.makeText(getBaseContext(),"当前position为:"+position,Toast.LENGTH_SHORT).show();
                    break;
                case 1:
                    Toast.makeText(getBaseContext(),"当前position为:"+position,Toast.LENGTH_SHORT).show();
                    break;
                case 2:
                    Toast.makeText(getBaseContext(),"当前position为:"+position,Toast.LENGTH_SHORT).show();
                    break;
}
        }

        @Override
public void onPageScrollStateChanged(int state) {

        }
    }

    /*继承PagerAdapter */
public class TestPagerAdapter extends PagerAdapter{

        private ArrayList<View> viewContainter;//tab对应的视图
private ArrayList<String> titleContainer;//tab的标题
/*
        * construction Function
        *   传入view跟title数组        * */
public TestPagerAdapter(ArrayList<View> viewContainter,ArrayList<String> titleContainer){
            this.viewContainter=viewContainter;
            this.titleContainer=titleContainer;
}
        /*
             * viewpager中组件数量             * */
@Override
public int getCount() {
            return viewContainter.size();
}

        /*
        * 初始化item
        *   做了两件事,第一:将当前视图添加到container中,第二:返回当前View
        *
        *   这个函数的实现的功能是创建指定位置的页面视图。        *   适配器有责任增加即将创建的View视图到这里给定的container中,        *   这是为了确保在finishUpdate(viewGroup)返回时this is be done!
返回值:返回一个代表新增视图页面的Object(Key),这里没必要非要返回视图本身,
            也可以这个页面的其它容器。其实我的理解是可以代表当前页面的任意值,
            只要你可以与你增加的View一一对应即可,比如position变量也可以做为Key
        * */
@Override
public Object instantiateItem(ViewGroup container, int position) {
            ((ViewPager) container).addView(viewContainter.get(position));
            return viewContainter.get(position);
}

        /*滑动切换的时候销毁当前组件        *   从当前container中删除指定位置(position)的View;
        * */
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView(viewContainter.get(position));
}

        /*
        * */
@Override
public int getItemPosition(Object object) {
            return super.getItemPosition(object);
}

        /*为每个页面提供页面标题*/
@Override
public CharSequence getPageTitle(int position) {
            return titleContainer.get(position);
}

        /*
        * 该函数用来判断instantiateItem(ViewGroup, int)
        *   函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)
        *
        *返回值:如果对应的是同一个View,返回True,否则返回False。        * */
@Override
public boolean isViewFromObject(View view, Object object) {
            return view == object;  //官方提示这样写
}
    }
}

       通过重写继承OnPageChangeListener跟PagerAdapter,将一些重复性代码放到这两个类里面,在onCreate里面只需要加入一些初始化的方法即可,但是感觉还有一些小bug:

      ViewPager+PagerTabStrip实现页面选项卡滑动

Bug1,刚进入到应用里面,标题没有显示出来。

Bug2:左右滑动的时候标题不固定。

好吧,继续改动!!!

以上就介绍了ViewPager+PagerTabStrip实现页面选项卡滑动,包括了Activity方面的内容,希望对Android开发有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_220216.html

posted @ 2016-11-05 15:28  天涯海角路  阅读(102)  评论(0)    收藏  举报