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 –