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
现在代码是这样
@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);
PagerFragmentAdapter adapter = new PagerFragmentAdapter(getChildFragmentManager());
mVp_content.setAdapter(adapter);
mPsts_tab.setViewPager(mVp_content);
adapter.addFragment(new NewFragment());
}
class PagerFragmentAdapter extends FragmentStatePagerAdapter {
List<Fragment> mFragments = new ArrayList<>();
public PagerFragmentAdapter(FragmentManager fm) {
super(fm);
}
public void addFragment(Fragment fragment) {
mFragments.add(fragment);
notifyDataSetChanged();
mPsts_tab.notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return "标题" + position;
}
}
我们可以把setAdapter和setViewPager都封装到里面
我们就把vp和tab都传进去
PagerFragmentAdapter adapter = new PagerFragmentAdapter(getChildFragmentManager(),mVp_content,mPsts_tab);
然后搞一个构造函数
public PagerFragmentAdapter(FragmentManager fm, ViewPager vp_content, PagerSlidingTabStrip psts_tab) {
super(fm);
mPsts_tab = psts_tab;
mVp_content = vp_content;
mVp_content.setAdapter(this);
mPsts_tab.setViewPager(mVp_content);
}
我们再抽一下addFragment
public void addFragment(Fragment fragment, String title) {
mTitle = title;
mFragments.add(fragment);
notifyDataSetChanged();
mPsts_tab.notifyDataSetChanged();
}
@Override
public CharSequence getPageTitle(int position) {
return mTitle;
}
现在我们就要添加tab了
adapter.addFragment(new NewFragment(), "tab1");
adapter.addFragment(new NewFragment(), "tab2");
adapter.addFragment(new NewFragment(), "tab3");
adapter.addFragment(new NewFragment(), "tab4");
现在我们把这个fragment作为一个基类
那么我们就要抽取添加fragment的方法
我们来个抽象方法
public abstract void setupTab(PagerFragmentAdapter adapter);
然后在构造函数中调用
setupTab(adapter)
然后我们把addFragment放到子类中去实现
public class NewViewPagerFragment extends ViewPagerFragment {
@Override
public void setupTab(PagerFragmentAdapter adapter) {
adapter.addFragment(new NewFragment(), "tab1");
adapter.addFragment(new NewFragment(), "tab2");
adapter.addFragment(new NewFragment(), "tab3");
adapter.addFragment(new NewFragment(), "tab4");
}
}
OK这样我们基类抽取就初步完成了
下次我们再要用到一个ViewpagerFragment的时候
那么我们只要继承ViewPagerFragment基类
然后去实现这个setupTab方法
去添加我们想要的标签就行了
简化了很多很多步骤