Android应用中滑动标签页被经常使用,一方面可以方便操作,一方面将要显示的内容进行分类从而方便阅读。一般我比较喜欢使用FragmentTabHost与Viewpager结合以实现这种动态效果。主要的思路就是将自己的标题显示在FragmentTabHost中,而将要显示的内容放置在ViewPager中显示,分别对FragmentTabHost和ViewPager设置changeListener,在当前标签页发生变化时调整自己的currentId。
仿照官方文档中给出的利用ActonBar和ViewPager的例子,我在这边也是用了一个TabsAdapter来完成标签也切换的工作。
public static class TabsAdapter extends FragmentPagerAdapter implements
OnPageChangeListener, OnTabChangeListener {
private final Context mContext;
private final ViewPager mViewPager;
private final FragmentTabHost mTabHost;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
static final class TabInfo {//我们可以利用一个bundle对象来保存Fragment中的数据
private final Class<?> clss;
private final Bundle args;
TabInfo(Class<?> _class, Bundle _args) {
clss = _class;
args = _args;
}
}
public TabsAdapter(FragmentActivity activity, FragmentTabHost tabHost,
ViewPager pager) {
super(activity.getSupportFragmentManager());
mContext = activity;
mViewPager = pager;
mTabHost = tabHost;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
mTabHost.setOnTabChangedListener(this);
}
//当TabHost添加标签页后也需要调用此方法以保持和ViewPager的一致
public void addTab(Class<?> clss, Bundle args) {
TabInfo info = new TabInfo(clss, args);
mTabs.add(info);
notifyDataSetChanged();
}
//设置TabHost改变后同时改变ViewPager
@Override
public void onTabChanged(String arg0) {
// TODO Auto-generated method stub
int position = mTabHost.getCurrentTab();
mViewP