1. 程式人生 > >解決Android開發中ViewPager動態設定PagerAdapter時第二次進入Fragment內容不顯示的問題

解決Android開發中ViewPager動態設定PagerAdapter時第二次進入Fragment內容不顯示的問題

問題描述

筆者最近的Android專案要用到PagerSlidingTabStrip和ViewPager的組合,但是從github上下載原始碼後順利執行示例專案,用到自己的專案後發現一個問題,就是第二次進入該ViewPager所在Fragment後PagerSlidingTabStrip載入正常,但是ViewPager不顯示內容,為一片空白。於是追蹤程式碼,發現ViewPager的子Fragment的onCreatView方法未被呼叫,於是懷疑在替ViewPager設定Adapter的環節出了問題。

以下是我第一次的Adapter程式碼

public class MyPagerAdapter
extends FragmentPagerAdapter {
private final String[] TITLES = { "外賣訂單", "快遞訂單" }; public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public CharSequence getPageTitle(int position) { return TITLES[position]; } @Override
public int getCount() { return TITLES.length; } @Override public Fragment getItem(int position) { return OrderListFragment.newInstance(position); } }

經過各種搜尋後發現繼承的Adapter不對,將FragmentPagerAdapter改為FragmentStatePagerAdapter後第二次進入就能正常載入Fragment內容了。

之後的程式碼

public class MyPagerAdapter extends FragmentStatePagerAdapter {

        private final String[] TITLES = { "外賣訂單", "快遞訂單" };

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return TITLES[position];
        }

        @Override
        public int getCount() {
            return TITLES.length;
        }

        @Override
        public Fragment getItem(int position) {
            return OrderListFragment.newInstance(position);
        }

    }

筆者也是第一次用ViewPager,對於機制什麼的也不太熟悉,希望能幫到也出現這個問題的人。