天天看點

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

繼續閱讀