4

나는 3 개의 fragments part of a navigation drawer이 있는데, 그 중 하나에는보기 페이지가 있습니다. 앱을 처음로드하면 뷰 페이지는 모든 조각을로드합니다. 그러나 탐색 창을 사용하여 다른 조각으로 전환하고 다시 전환하면보기 페이지 조각 중 하나가로드되지 않습니다. 코드 herehere을 시도했지만 해결 방법을 찾지 못했습니다.중첩 된 뷰 페이지 조각이 초기화되지 않음

내 pageradapter 코드에서 다른 조각에 대한 스위치 케이스; 나는 위치에 대한 로그를 넣었고 위치 1은 앱의 초기로드 이후에 오지 않는 것 같습니다.

내 질문은, 위치 1이 결코 호출되지 않는 이유는 무엇입니까? 누군가 나에게 설명 할 수 있을까? 당신이 슬쩍에 열린 두 번째 단편 싶어

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

getChildFragmentManager();을 사용하고 있습니다 :

여기 내 Pageradapter 코드입니까? –

+0

내 homefragment에 이미 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; 
    } 

이가 있는지 확인하려고하면

+0

참고 : ** setOffscreenPageLimit **의 기본값은 3이며 명시 적으로 설정하지 않아도됩니다. – Amir

+0

내 대답을 편집했습니다 –

+0

pagerAdapter = new PagerAdapter (getActivity(). getChildFragmentManager(), 3)를 호출하면 내 홈 코드에서 getChildFragmentManager()를 사용할 수 없습니다. 그것은 메소드를 처리 할 수 ​​없다. getChildFragmentmanager –