ViewPageIndicator + ViewPager + Fragment实现类似网易新闻客户端Tab标签(二)

2015-01-27 06:20:35 · 作者: · 浏览: 25
droid.support.v4.app.FragmentPagerAdapter; public class TabPageIndicatorAdapter extends FragmentPagerAdapter { private String[] title; public TabPageIndicatorAdapter(FragmentManager fm, String[] title) { super(fm); this.title = title; } @Override public Fragment getItem(int arg0) { Fragment fragment=new ItemFragment(); Bundle bundle=new Bundle(); bundle.putString("arg", title[arg0]); fragment.setArguments(bundle); return fragment; } @Override public int getCount() { return title.length; } @Override public CharSequence getPageTitle(int position) { return title[position%title.length]; } } 看着很熟悉吧,前面一片文章已经写过viewPager的使用了,这里主要说一下getPageTitle(int position)这个函数,如果你不重写这个函数,tab中就不会出现设置的文字,要想文字出现,必须要重写这个函数

当然如果上面写的内容你全部敲完了也就是能实现滑动,那天跟着跑的线,样式什么的都没有,下面你需要继续敲,这里是通过改变主题来设置的



    
这里主要就是对背景的设置,对背景的设置,是通过选择器实现的

  

  

    
   
    
   
    
   
    
   


  
这样就能实现你想要的滑动了,主要要改变配置文件中的主题(application中的主题作用于整个app,不是只针对于某个acticity)

注:代码是通过夏神代码改编,开始已附上地址

代码下载地址:http://download.csdn.net/detail/elinavampire/8171355



...................................................................................简单看一下源代码...............................................................................................................


首先看一下TabPageIndicator,继承自HorizontalScrollView,也就是说tab是可以实现横向滑屏

public class TabPageIndicator extends HorizontalScrollView implements PageIndicator

继续看里面的代码

private final OnClickListener mTabClickListener = new OnClickListener() {
        public void onClick(View view) {
            TabView tabView = (TabView)view;
            final int oldSelected = mViewPager.getCurrentItem();
            final int newSelected = tabView.getIndex();
            mViewPager.setCurrentItem(newSelected);
            if (oldSelected == newSelected && mTabReselectedListener != null) {
                mTabReselectedListener.onTabReselected(newSelected);
            }
        }
    };

也就是说它本身就实现了点击功能,它不仅仅是实现滑动,其余的就跟实现自定义控件的内容有些相似了

我们使用的方法中还有setViewPager(viewPager)和setOnPageChangeListener()方法,就简单看一下这部分代码

void setViewPager(ViewPager view);和 void setOnPageChangeListener(ViewPager.OnPageChangeListener listener);是接口PageIndicator的方法,TabPageIndicator在自己的类里面实现了接口里面的方法

 @Override
    public void setViewPager(ViewPager view) {
        if (mViewPager == view) {
            return;
        }
        if (mViewPager != null) {
            mViewPager.setOnPageChangeListener(null);
        }
        final PagerAdapter adapter = view.getAdapter();
        if (adapter == null) {
            throw new IllegalStateException("ViewPager does not have adapter instance.");
        }
        mViewPager = view;
        view.setOnPageChangeListener(this);
        notifyDataSetChanged();
    }
这个方法是为了Bind the indicator to a ViewPager.

@Override
    public void setOnPageChangeListener(OnPageChangeListener listener) {
        mListener = listener;
    }
这个主要就是使用viewPager的监听事件了,其实TabPageIndicator就是一个自定义控件

ok,先到这