1. 程式人生 > >ViewPager + Fragment 這些坑你踩過嗎?

ViewPager + Fragment 這些坑你踩過嗎?

1.ViewPager + Fragment,fragment 的頁面不顯示:

1.PullToReFreshView/ScrollView 巢狀ViewPager有衝突導致ViewPager高度變化,這一點和ScrollView包含ListView/GridView一個道理,在上一篇闡述過了。

2.在ViewPager的宿主Activity中設定mViewPager.setVisibility(View.GONE); 導致ViewPager並沒有初始化Fragment.  舉例來說:我在ViewPager的宿主Activity的OnResume();

裡需要發起網路請求,同時mViewPager.setVisibility(View.GONE); ,等待網路訪問返回再設定mViewPager.setVisibility(View.VISIBLE);結果無論如何Fragment都不顯示,後來改為mViewPager.setVisibility(View.INVISIBLE); 就Ok了。 

原因“:mViewPager.setVisibility(View.GONE);  ViewPager不會繪製介面 即 OnDraw();不會執行

    mViewPager.setVisibility(View.INVISIBLE);   ViewPager繪製介面 即 OnDraw();會執行

2. Fragment  生命週期中的OnResume(); OnPause(); 只會在第一次進入Fragment的時候才會被執行,怎麼辦? 兩種解決方案(我只知道兩種,別噴)。

1.ViewPager.setOnPagerChangedListener(new OnPagerChangedListener(

.........................

onPagerSelected(int position) {

/**如果是ViewPager+Fragment的模式,一般都會有一個FragmentList,這裡為了把Fragment OnResume中執行的程式碼放到這裡使用如下方法**/

if(mFragmentList.get(position) instanceof  xxFragment) {

................

}

}

));

2.fragment onhiddenchanged();方法,但是這種實現是建立的在Fragment的介面在可見不可見之間變化才會被執行(不可取),但是如果你的Fragment剛好需要在可見不可見之間變化那就OK了