189_ViewPagerFragment基类抽取
来源:互联网 发布:stl源码剖析下载 编辑:程序博客网 时间:2024/06/14 00:29
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方法
去添加我们想要的标签就行了
简化了很多很多步骤
- 189_ViewPagerFragment基类抽取
- 176_ViewPagerFragment基类抽取
- 基类抽取
- MVP模式下面基类的抽取
- Fragment 基类的常规抽取
- Fragment 基类的高级抽取,分析
- 解读Recyclerview基类抽取与应用
- Activity和 Fragment抽取基类
- javaweb servlet开发之servlet抽取(抽取基类减少servlet类数量)
- android 抽取basepager类
- JDBC公共类抽取
- UML2基类如何抽取qq群讨论内容-5
- UML2基类如何抽取qq群讨论内容-3
- UML2基类如何抽取qq群讨论内容-4
- android BaseAdapter 自定义适配器 BaseAdapter基类抽取 一
- android BaseAdapter 自定义适配器 BaseAdapter基类抽取 二
- Android之样式和基类的抽取
- 基于okHttpUtils网络请求的基类抽取
- Machine Learning in Action 学习笔记-(5)Logistic回归
- MySql修改密码后PhpAdmin无法登陆
- c++第七次上机作业
- C++第六次实验
- 访问I/O内存和I/O端口设备
- 189_ViewPagerFragment基类抽取
- Centos下虚拟机连网问题
- C++作业7
- C和C++中的标准输出和标准错误输出
- 【Effective Java】1.静态工厂方法来替换构造函数
- c++上机实验-7
- 处理问题的方法
- c++第七次作业
- 阿里面经