天天看点

176_ViewPagerFragment基类抽取 ViewPagerFragment基类抽取

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);

继续阅读