嵌套的Viewpager Fragment没有被初始化

4
我有三个导航抽屉的片段,其中一个包含一个viewpager。当我首次加载应用程序时,viewpager会加载所有片段。然而,当我使用navi-drawer切换到另一个片段并返回时,其中一个viewpager片段没有加载。我尝试了这里这里的代码,但是我无法找到解决方案。
在我的pageradapter代码中,对于不同片段的switch case,我放置了一个位置日志,并且在应用程序的初始加载之后似乎没有出现位置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;
}

你想在滑动时打开第二个片段吗? - Anshul Tyagi
我的HomeFragment已经包含了一个ViewPager。该ViewPager包含3个Fragment。其中第二个Fragment没有被初始化。第一个和第三个都已经初始化了。 - Richeek Dey
你是如何检查它的? - Anshul Tyagi
我可以看到它没有被初始化。它是一个图形。而且我看不到这个图形。 - Richeek Dey
好的,那个片段有图表。你能发更多的代码让我们找出错误吗? - Anshul Tyagi
显示剩余4条评论
1个回答

4
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();确保正确性。


注意:setOffscreenPageLimit 的默认值为 3,您无需显式地设置它。 - Amir
在我的HomeFragment代码中,我无法使用getChildFragmentManager()。当我调用pagerAdapter = new PagerAdapter(getActivity().getChildFragmentManager(),3);时,它会抛出“无法解析方法getChildFragmentmanager”的错误。 - Richeek Dey
@RicheekDey 在你的 Fragment 中使用 pagerAdapter = new PagerAdapter(getChildFragmentManager()); 就像这样。 - Digvijay Singh
好的,现在什么也没有显示出来。:/ 从我第一次加载应用程序开始,ViewPager就是空白的。 - Richeek Dey
这个方法非常有效:只需将 getActivity().getFragmentManager() 更改为 getChildFragmentmanager()。 - Samuel Owino
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接