offscreen viewpager片段在第一次加载后不会渲染

时间:2015-01-31 14:37:59

标签: android android-fragments android-viewpager android-fragmentactivity fragmentstatepageradapter

我有一个带有5个标签的viewpager,如果我转到第5个片段(这是我点击第5个标签时加载的片段或者滑动到第5个标签)然后我转到第3个标签,第5个片段赢了' t再加载视图,如果我转到第2或第1个标签,则第4个和第5个标签不会。我尝试更改viewpager.offscreenlimit(3)甚至5,没有结果。如果它有助于任何人弄清楚它,无论我放置什么片段代替第3和第4位置,它都会发生。此外,第一次viewpager更改需要一段时间,大约1.5秒。

这是我的代码

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));
}
}

1 个答案:

答案 0 :(得分:0)

我终于明白了!我有这些代码行

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);
            }
        }
    });

我只是将它们评论出来。我想我应该发布,但我不知道它可能会干扰没有加载的页面。