屏幕外viewpager碎片将不会加载第1次后呈现 [英] offscreen viewpager fragments won't render after 1st time loaded

本文介绍了屏幕外viewpager碎片将不会加载第1次后呈现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有5选项卡的viewpager,如果我去的第5段(也就是当我点击第五选项卡或滑动到5片装的片段),然后我去了第三个选项卡中的第5段获得了 ŧ再装入看法,如果我去的第二或第一个选项卡中的第4和第5片不会。我试图改变viewpager.offscreenlimit(3),甚至5没有结果。如果它可以帮助任何人弄清楚,那无论我把什么片段到位第三第四和第五的位置会发生。另外,第一viewpager变化需要一段时间,大约1.5秒。

这是我的code

  mport android.os.Bundle;
进口android.support.v4.app.Fragment;
进口android.support.v4.app.FragmentManager;
进口android.support.v4.app.FragmentStatePagerAdapter;
进口android.view.ViewGroup;进口的java.util.List;公共类AppSectionsPagerAdapter扩展FragmentStatePagerAdapter
{
私有静态的String [] = fragmentNames {Example0,例1,例题,例3,例4};
私人FragmentManager fragmentManager = NULL;
私人列表<片断>碎片= NULL;
片段example0;
片段例1;
片段示例2;
片段例3;
例4片段;
INT numFragments;
INT错误code;公共AppSectionsPagerAdapter(FragmentManager FM)
{
    超(FM);
    numFragments = 5;
    this.fragmentManager =调频;
    example0 =新ListFragment();
    例1 =新ListFragment();
    例2 =新ListFragment();
    例3 =新的片断();
    例4 =新片段();}
@覆盖
公共片段的getItem(int i)以
{
    开关(ⅰ)
    {
        情况下0:
             返回example0;
        情况1:
            返回例1;
        案例2:
           返回例题;
        案例3:
            返回例3;
        情况4:
            返回例4;        默认:
            片段FRAG =新Error_Fragment();
            捆绑ARGS =新包();
            错误code = -5;
            //args.putInt(error$c$c,1 + 1);
            frag.setArguments(参数);
            返回FRAG;
    }
}
@覆盖
公众诠释getCount将()
{
   返回numFragments;
}@覆盖
公共CharSequence的getPageTitle(INT位置)
{
    返回fragmentNames [位置]
}@覆盖
公共无效setPrimaryItem(ViewGroup中的容器,INT位置,Object对象)
{
    super.setPrimaryItem(容器,0,对象);
}
@覆盖
公共无效notifyDataSetChanged()
{
    super.notifyDataSetChanged();
}
@覆盖
公共无效destroyItem(ViewGroup中收集,INT位置,对象视图)
{
    fragmentManager.executePendingTransactions();
    //fragmentManager.saveFragmentInstanceState(fragments.get(position));
}
}


解决方案

我终于想通了!我有code的这些行

  vpager.setPageTransformer(假,新ViewPager.PageTransformer()//页面刷卡动画
    {
        @覆盖
        公共无效transformPage(查看页面,浮动的位置)
        {
            INT页宽= page.getWidth();
            INT pageHeight = page.getHeight();            如果(位置< -1)// [-Infinity,-1)
            {
                //该页面的方式关闭屏幕左侧。
                page.setAlpha(1);
            }
            否则如果(位置及下; = 1)//页的左侧,页居中,页向右
            {
                //此处修改页面视图动画在视图页面
            }
            否则//(1 +无限远]
            {
                //该页面的方式关闭屏幕右侧。
                page.setAlpha(0);
            }
        }
    });

和我简单地评论他们。我想我应该张贴,但我不知道它可能与页面没有加载干扰。

I have a viewpager with 5 tabs and if I go to the 5th fragment(that is the fragment loaded when I click the 5th tab or swipe to the 5th tab) and then I go to the 3rd tab the 5th fragment won't load the view anymore and if I go to the 2nd or 1st tab the 4th and 5th tabs won't. I tried changing the viewpager.offscreenlimit(3) or even 5 with no results. If it helps anyone figure it out, it happens regardless of what fragments I put in place of the 3rd 4th and 5th positions. Also, the first viewpager change takes a while , about 1.5 seconds.

here is my code

mport android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

import java.util.List;

public class AppSectionsPagerAdapter extends FragmentStatePagerAdapter
{
private static String[] fragmentNames = { "Example0", "Example1", "Example2","Example3","Example4"};
private FragmentManager fragmentManager = null;
private List<Fragment> fragments=null;
Fragment example0;
Fragment example1;
Fragment example2;
Fragment example3;
Fragment example4;
int numFragments;
int errorcode;

public AppSectionsPagerAdapter(FragmentManager fm)
{
    super(fm);
    numFragments = 5;
    this.fragmentManager = fm;
    example0 = new ListFragment();
    example1 = new ListFragment();
    example2 = new ListFragment();
    example3 = new Fragment();
    example4 = new Fragment();

}
@Override
public Fragment getItem(int i)
{
    switch (i)
    {
        case 0:
             return example0;
        case 1:
            return example1;
        case 2:
           return example2;
        case 3:
            return example3;
        case 4:
            return example4;

        default:
            Fragment frag = new Error_Fragment();
            Bundle args = new Bundle();
            errorcode = -5;
            //args.putInt(errorcode, i + 1);
            frag.setArguments(args);
            return frag;
    }
}
@Override
public int getCount()
{
   return numFragments;
}

@Override
public CharSequence getPageTitle(int position)
{
    return fragmentNames[position];
}

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object)
{
    super.setPrimaryItem(container,0,object);
}
@Override
public void notifyDataSetChanged()
{
    super.notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view)
{
    fragmentManager.executePendingTransactions();
    //fragmentManager.saveFragmentInstanceState(fragments.get(position));
}
}

解决方案

I finally figured it out! I had these lines of code

vpager.setPageTransformer(false, new ViewPager.PageTransformer() // page swipe animations
    {
        @Override
        public void transformPage(View page, float position)
        {
            int pageWidth = page.getWidth();
            int pageHeight = page.getHeight();

            if (position < -1)   // [-Infinity,-1)
            {
                // This page is way off-screen to the left.
                page.setAlpha(1);
            }
            else if(position <= 1)    // Page to the left, page centered, page to the right
            {
                // modify page view animations here for pages in view
            }
            else     // (1,+Infinity]
            {
                // This page is way off-screen to the right.
                page.setAlpha(0);
            }
        }
    });

and I simply commented them out. I guess I should have posted that but I had no idea it could interfere with pages not loading.

这篇关于屏幕外viewpager碎片将不会加载第1次后呈现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆