4

私は3つのfragments part of a navigation drawerを持っています。そのうちの1つにはビューページャーが含まれています。最初にアプリケーションを読み込むと、ビューページはすべてのフラグメントを読み込みます。しかし、私がナビドロワーを使って別のフラグメントに切り替えると、私は戻って、ビューページのフラグメントの1つが読み込まれていません。私はコードherehereを試しましたが、私は解決策を考え出すことができません。ネストしたビューページのフラグメントが初期化されない

私のpageradapterコードでは、異なるフラグメントのスイッチケースです。私は位置のログを入れて、位置1は、アプリケーションの最初の負荷の後に来ていないようです。

私の質問は、位置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にはすでにビューページが含まれています。そのビューページには3つのフラグメントが含まれています。その中で、2番目のものは初期化されていません。第1と第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; 
    } 

これはあなたがスワイプで開いた第2の断片をしたいgetChildFragmentManager();

+0

注:** setOffscreenPageLimit **のデフォルトは3です。明示的に設定する必要はありません。 – Amir

+0

私の答えを編集しました –

+0

pagerAdapter = new PagerAdapter(getActivity()。getChildFragmentManager()、3)を呼び出すと、自宅のコードでgetChildFragmentManager()を使用できません。それをスローアップメソッドgetChildFragmentmanagerを解決することはできません –

関連する問題