【问题标题】:Fragments inside a View PagerView Pager 中的片段
【发布时间】:2017-02-20 17:08:38
【问题描述】:

我在视图寻呼机上使用了三个片段,我使用位置 id 作为参考,并根据我的片段正在显示的位置 id,每个片段中都有不同的数据,这是我的代码

 @Override
    public Fragment getItem(int position)
    {

        if(position==1){
                Log.e("Fragment","Fragment 1::"+String.valueOf(i));
                if (!(i<3))
                {
                    new Progress(100).execute();
                    new Progress2(20).execute();
                    new Progress3(30).execute();
                }
                ++i;
                return SlideFragment.newInstance(1, " ");}

           if(position==2){
                Log.e("Fragment","Fragment 2");
                if (!(i<3))
                {
                    new Progress(40).execute();
                    new Progress2(50).execute();
                    new Progress3(90).execute();
                }
                ++i;
                return Slidetwo.newInstance(String.valueOf(2), " ");}
          if (position==3)
                Log.e("Fragment","Fragment 3");
                if (!(i<3))
                {
                    new Progress(50).execute();
                    new Progress2(10).execute();
                    new Progress3(40).execute();
                }
                ++i;
                return SlideThree.newInstance(String.valueOf(3), " ");


    }

在此代码中,仅显示了两个日志值,即使显示了所有三个片段的数据,我也没有从所有三个片段中获取日志,并且当我向后滑动时正在显示该片段中的数据对于其他两个片段,我有谁知道我错在哪里,请帮助我。

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    这是因为ViewPager默认会在内存中加载当前页和下一页。

    试试setOffScreenPageLimit()

    示例)

    ViewPager viewPager;
    viewPager.setOffScreenPageLimit(2);
    

    【讨论】:

    • 我试过了,如果我申请 mPager.setOffScreenpageLimit(2)。我只从片段 1 中获取日志值,而其他两个片段已经消失了
    • mPager.setOffscreenPageLimit(3);当我使用这个时,我得到了所有三个日志,只有当我第一次从 android studio 运行它时,如果我滑动片段我什么也没得到@Suhyeon Lee
    • @TamilSelvan 你最好先阅读ViewPager.setOffScreenpageLimit()的API文档。它第一次加载页面并将它们保留在内存中,并且在加载页面时调用 getItem() 方法。如果您想在更改页面时获取日志,则必须改用ViewPager.OnPageChangeListener()
    【解决方案2】:

    使用这个。从0开始你的位置;

    @Override
    public Fragment getItem(int position)
    {
    
        if(position==0){
                Log.e("Fragment","Fragment 1::"+String.valueOf(i));
                if (!(i<3))
                {
                    new Progress(100).execute();
                    new Progress2(20).execute();
                    new Progress3(30).execute();
                }
                ++i;
                return SlideFragment.newInstance(1, " ");}
    
           if(position==1){
                Log.e("Fragment","Fragment 2");
                if (!(i<3))
                {
                    new Progress(40).execute();
                    new Progress2(50).execute();
                    new Progress3(90).execute();
                }
                ++i;
                return Slidetwo.newInstance(String.valueOf(2), " ");}
          if (position==2)
                Log.e("Fragment","Fragment 3");
                if (!(i<3))
                {
                    new Progress(50).execute();
                    new Progress2(10).execute();
                    new Progress3(40).execute();
                }
                ++i;
                return SlideThree.newInstance(String.valueOf(3), " ");
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 2023-04-02
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多