177_PagerSliding项目

PagerSliding项目

我们用一个开源项目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);

 

 

然后我们添加Fragment,

adapter要notify一下

tab也要notify一下

然后就是给title标题

 

 

 

代码

 

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

        }

    }

posted @ 2016-12-30 15:35  天涯海角路  阅读(90)  评论(0)    收藏  举报