这次将介绍一下ViewPagerIndicator框架的另外两种,这两种使用也是建立在第一中简单圆点提示的上面的。所以没有看过的朋友可以去看看第一部分的内容。
带有String提示的Indicator
第二种介绍的是TabPagerIndicator,这是一种类似于新闻头条一样的上部滑动提示条。如:
这种样式在实现某些新闻资讯类的app是会比较好用。
这种的使用方法基本跟第一种方法一致。
也需要有
MainActivity(extends ActivityFragment)
TabFragmentPagerAdapter(extends FragmentPagerAdapter)
TabFragment(extends Fragment)
这三个主要的类
ViewPager.setAdapter(TabFragmentPagerAdapter);//这个是Viewpager设置适配器
Indicator.setViewPager(viewPager);//这是设置Indicator与viewpager关联
布局文件和之前基本一样,现在就是换成了TabPagerIndicator。
MainActivity的写法跟第一种方法一致
唯一的区别是TabFragmentPagerAdapter中出了需要重写getItem()方法和getConut()方法。还需要重写getPagerTitle()方法
getPagerTitle方法用来回调,为Indicator显示Fragment的标示名。
packagecom.example.testtabpager;
importandroid.support.v4.app.Fragment;
importandroid.support.v4.app.FragmentManager;
importandroid.support.v4.app.FragmentPagerAdapter;
public classTestFragmentPagerAdapter extendsFragmentPagerAdapter{
publicTestFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position){
returnTestFragment.newInstance(Const.TABS[position]);
}
@Override
public intgetCount() {
return Const.TABS.length;
}
//回调显示Fragment的标示名
@Override
public CharSequencegetPageTitle(int position) {
return Const.TABS[position];
}
}
带有图片的Indicator
如果只是简单的在图片作为标识,只需要添加在FragmentPagerAdapter重写的时候添加一个接口IconPagerAdapter,并且重写getIconResId(int position)方法,从这个名字就可以看出是来回调以显示Fragment的标识图片的。并且提供一个数组存放每个图片选中和普通的状态资源文件。
packagecom.viewpagerindicator.sample;
importandroid.support.v4.app.Fragment;
importandroid.support.v4.app.FragmentManager;
importandroid.support.v4.app.FragmentPagerAdapter;
importcom.viewpagerindicator.IconPagerAdapter;
classTestFragmentAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
protected static final String[] CONTENT =new String[] { "This", "Is", "A","Test", };
protected static final int[] ICONS = newint[] {
R.drawable.perm_group_calendar,
R.drawable.perm_group_camera,
R.drawable.perm_group_device_alarms,
R.drawable.perm_group_location
};
private int mCount = CONTENT.length;
public TestFragmentAdapter(FragmentManagerfm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
returnTestFragment.newInstance(CONTENT[position % CONTENT.length]);
}
@Override
public int getCount() {
return mCount;
}
@Override
public CharSequence getPageTitle(intposition) {
returnTestFragmentAdapter.CONTENT[position % CONTENT.length];
}
@Override
public int getIconResId(int index) {
return ICONS[index % ICONS.length];
}
public void setCount(int count) {
if (count > 0 && count <=10) {
mCount = count;
notifyDataSetChanged();
}
}
}
需要在drawable中写出xml的配置文件,
例如:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/perm_group_calendar_selected"/>
<item android:drawable="@drawable/perm_group_calendar_normal"/>
</selector>
如果是不仅有文字还有图片两种标识的Tab,在重写FragmentPagerAdapter的时候需要实现IconPagerAdapter并重写getPagerTitle和getIconResId两个方法。
classGoogleMusicAdapter extends FragmentPagerAdapterimplements IconPagerAdapter {
publicGoogleMusicAdapter(FragmentManager fm) {
super(fm);
}
@Override
public FragmentgetItem(int position) {
returnTestFragment.newInstance(CONTENT[position % CONTENT.length]);
}
@Override
publicCharSequence getPageTitle(int position) {
return CONTENT[position% CONTENT.length].toUpperCase();
}
@Override public intgetIconResId(int index) {
return ICONS[index];
}
@Override
public intgetCount() {
return CONTENT.length;
}
}
总结:以上就是ViewPagerIndic第三方控件的几种使用方法。可以看到主界面FragmentActivity和Fragment练习起来的桥梁是FragmentPagerAdapter。通过添加重写FragmentPagerAdapter中的方法,为Indicator提供不同的回调方法,从而获得布局的各种参数然后得到我们想要的效果。