4

我有3 fragments part of a navigation drawer,其中之一包含viewpager。當我第一次加載應用程序時,viewpager會加載所有的片段。但是,當我使用navi-drawer切換到另一個片段並切換回來時,其中一個viewpager片段未加載。我嘗試了代碼herehere,但我無法提出解決方案。嵌套的Viewpager片段沒有得到初始化

在我的pageradapter代碼中,在switch case中爲不同的片段;我已經爲這個位置放了一個日誌,並且在應用的初始加載之後,位置1似乎不會出現。

我的問題是,爲什麼第一個位置永遠不會被調用?有人可以向我解釋嗎?

這裏是我的Pageradapter代碼:

class PagerAdapter extends FragmentStatePagerAdapter { 

static HeartRate_Fragment heartRate_fragment; 
static Calorie_Fragment calorie_fragment; 
static Steps_Fragment steps_fragment; 

int num; 
public PagerAdapter(Context context, FragmentManager fm) { 
    super(fm); 

} 
@Override 
public Fragment getItem(int position) { 
    //add new fragment here for homepage viewpager 
    Log.d("position",position+""); 
    switch (position) { 

     case 0: 
      if(calorie_fragment == null) 
      calorie_fragment = new Calorie_Fragment(); 
      Log.d("flip",0+""); 
      return calorie_fragment; 

     case 1: 
      if(heartRate_fragment == null) 
       heartRate_fragment = new HeartRate_Fragment(); 
      Log.d("flip",1+""); 
      return heartRate_fragment; 


     case 2: 
      if(steps_fragment == null) 
      steps_fragment = new Steps_Fragment(); 
      Log.d("flip",2+""); 
      return steps_fragment; 


     default: 
      return null; 

    } 

} 

@Override 
public int getCount() { 
    return num; 
} 

public HeartRate_Fragment getHRFragment() 
{ 
    return heartRate_fragment; 
} 
public Calorie_Fragment getCalorie_fragment() 
{ 
    return calorie_fragment; 
} 
public Steps_Fragment getSteps_fragment() 
{ 
    return steps_fragment; 
} 
+0

你想開第二個片段上刷卡? –

+0

我的homefragment已經包含一個viewpager。該viewpager包含3個片段。那第二個沒有被初始化。第一和第三是。 –

+0

你是如何檢查它? –

回答

2
class PagerAdapter extends FragmentStatePagerAdapter { 

static HeartRate_Fragment heartRate_fragment; 
static Calorie_Fragment calorie_fragment; 
static Steps_Fragment steps_fragment; 

int num; 
public PagerAdapter(Context context, FragmentManager fm) { 
super(fm); 

} 
@Override 
public Fragment getItem(int position) { 
    //add new fragment here for homepage viewpager 
Log.d("position",position+""); 
switch (position) { 

    case 0: 

     if(calorie_fragment == null){ 
     calorie_fragment = new Calorie_Fragment(); 
     return calorie_fragment; 
     }else { 
     return getCalorie_fragment(); }   

    case 1: 
     if(heartRate_fragment == null){ 
      heartRate_fragment = new HeartRate_Fragment(); 
      return heartRate_fragment;} 
     else{ return getHRFragment();} 

    case 2: 
     if(steps_fragment == null){ 
     steps_fragment = new Steps_Fragment(); 
     return steps_fragment; 
     } 
     else{ return getSteps_fragment();} 

    default: 
     return null; 

} 

} 

@Override 
public int getCount() { 
return 3; 
} 

public HeartRate_Fragment getHRFragment() 
    { 
    return heartRate_fragment; 
    } 
    public Calorie_Fragment getCalorie_fragment() 
    { 
    return calorie_fragment; 
    } 
    public Steps_Fragment getSteps_fragment() 
    { 
    return steps_fragment; 
    } 

嘗試這種確保您使用getChildFragmentManager();

+0

注意:** setOffscreenPageLimit **的默認值是3,您不需要明確設置它。 – Amir

+0

編輯我的答案 –

+0

當我調用pagerAdapter = new PagerAdapter(getActivity()。getChildFragmentManager(),3)時,我無法使用getChildFragmentManager()在我的homefragment代碼中。它拋出了無法解析的方法getChildFragmentmanager –