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;

        }

    }

 

 

 

我们可以把setAdaptersetViewPager都封装到里面

 

我们就把vptab都传进去

 

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方法

去添加我们想要的标签就行了

 

简化了很多很多步骤

 


0 0