ViewPagerFragment基类抽取
ViewPager现在都是配合Fragment使用
然后这些Fragment别说一样不一样
反正肯定是要抽基类的
抽基类便于管理,便于,反正各种好处
废话不多说,直接开始
我们来个TestApp
我们来个ViewPagerFragment继承Fragment
我们以前如果想把这个Fragment放到Activity里面
总是这样做
就是来个FrameLayout作为容器
然后
getSupportFragmentManager()
.beginTransaction()
.add(new ViewPagerFragment(), R.id.fl_content)
.commitAllowingStateLoss();
如果我们就这么一个Fragment,
其实不用这么麻烦
我们可以直接在xml布局文件中这样做
<fragment
android:layout_width="match_parent"
android:id="@+id/fg_main_content"
android:name="com.lichenhao.viewpagerfragmenttest.ViewPagerFragment"
android:layout_height="match_parent"/>
这里要注意
一定要给id或者tag
然后给个name,就是为了标识是ViewPagerFragment
现在我们配置一下fragment
我们用一个开源项目PagerSliding
这个其实也是实现了标签和ViewPager的结合
我们之前一直用design包里面的TabLayout
确实很方便
但是有缺陷
就是我们要修改起来其实很麻烦
如果我们用开源项目的话
理解了之后修改源码就比较简单了
我们可以修改成我们自己想要的
给fragment布局
<com.astuetz.PagerSlidingTabStrip
android:layout_width="match_parent"
android:id="@+id/psts_fragment_main_tab"
android:layout_height="48dp"/>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:id="@+id/vp_fragment_main_content"
android:layout_height="match_parent"/>
我们经常在onCreateView方法里面初始化
但是我喜欢直接把view返回出去
然后我再在onViewCreated方法里面去初始化
都是一样的
这样的话看上去更舒服
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return View.inflate(getContext(), R.layout.fragment_main_content, null);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mPsts_tab = (PagerSlidingTabStrip) view.findViewById(R.id.psts_fragment_main_tab);
mVp_content = (ViewPager) view.findViewById(R.id.vp_fragment_main_content);
}
然后我们来个适配器
专门给Fragment和ViewPager用的
class PagerFragmentAdapter extends FragmentStatePagerAdapter {
List<Fragment> mFragments = new ArrayList<>();
public PagerFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
}
然后我们把他们关联起来
1.创建适配器
PagerFragmentAdapter adapter = new PagerFragmentAdapter(getChildFragmentManager());
2.设置适配器
mVp_content.setAdapter(adapter);
3.把tab和viewpager关联起来
mPsts_tab.setViewPager(mVp_content);