- 首先是一个Fragment的适配器类
重点看静态内部类Holder就可以了,在这里其实是Builder
模式的使用
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* 碎片化界面适配器<br>
* Copyright (c) 2016 ycuzjj@163.com. All rights reserved.
*/
public class ContentFragmentAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments = new ArrayList<>();
public ContentFragmentAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragments.get(position).getTag();
}
// 使用静态内部类初始化数据
public static class Holder {
private final List<Fragment> fragments = new ArrayList<>();
private FragmentManager manager;
public Holder(FragmentManager manager) {
this.manager = manager;
}
public Holder add(Fragment f) {
fragments.add(f);
return this;
}
public ContentFragmentAdapter set() {
return new ContentFragmentAdapter(manager, fragments);
}
}
}
- 在Activity中的使用
/**
* 初始化viewpager
*/
private void initViewPager() {
//缓存3页避免切换时出现空指针
mViewPager.setOffscreenPageLimit(3);
// 使用
mViewPager.setAdapter(new ContentFragmentAdapter.Holder(getSupportFragmentManager())
.add(IndexFragment.newInstance())
.set());
mViewPager.setCurrentItem(0);
// 添加事件监听
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
((TabView) mTabGroup.getChildAt(position)).setChecked(true);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
好处
- 在这里用静态内部类其实是实现了
Builder
模式,可以多次设置对象的属性而无需重新获取引用
- 在这里用静态内部类其实是实现了