Android 首次加载后,屏幕外的viewpager片段不会呈现
我有一个带有5个选项卡的viewpager,如果我转到第5个片段,即单击第5个选项卡或滑动到第5个选项卡时加载的片段,然后我转到第3个选项卡,第5个片段将不再加载视图,如果我转到第2个或第1个选项卡,第4个和第5个选项卡将不再加载视图。我尝试更改viewpager.offscreenlimit3甚至5,但没有结果。如果它能帮助任何人找到答案,那么不管我在第三、第四和第五位置放置了什么碎片,它都会发生。此外,第一次更改viewpager需要一段时间,大约1.5秒 这是我的密码Android 首次加载后,屏幕外的viewpager片段不会呈现,android,android-fragments,android-viewpager,android-fragmentactivity,fragmentstatepageradapter,Android,Android Fragments,Android Viewpager,Android Fragmentactivity,Fragmentstatepageradapter,我有一个带有5个选项卡的viewpager,如果我转到第5个片段,即单击第5个选项卡或滑动到第5个选项卡时加载的片段,然后我转到第3个选项卡,第5个片段将不再加载视图,如果我转到第2个或第1个选项卡,第4个和第5个选项卡将不再加载视图。我尝试更改viewpager.offscreenlimit3甚至5,但没有结果。如果它能帮助任何人找到答案,那么不管我在第三、第四和第五位置放置了什么碎片,它都会发生。此外,第一次更改viewpager需要一段时间,大约1.5秒 这是我的密码 mport andr
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));
}
}
我终于明白了!我有这些代码行
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);
}
}
});
我只是简单地把它们注释掉了。我想我应该把它贴出来,但我不知道它会干扰不加载的页面。我会先去掉destroyItem、notifyDataSetChanged和setPrimaryItem。然后,我将超类更改为FragmentPagerAdapter,因为只有五页,您不需要FragmentStatePagerAdapter。此外,如果您在getItem中按需创建片段,而不是预先创建片段,那么您将获得更好的性能。如果这些都没有帮助,您需要更详细地解释什么将不再加载视图。感谢您的发布。我尝试了你所有的建议,但还是一无所获。我开始怀疑这可能是内存问题,所以我将onlowmemory回调放进去,并将禁用在我的ListView中显示这些图像,因为我使用了android studio示例代码来处理基本的字符串ListView,我猜是这些图像占用了大量内存。我会让你知道,通常情况下,当你的内存耗尽时,你会遇到更具体的问题,比如OutOfMemoryError崩溃。我不知道这些图像来自何处,但如果它们来自磁盘或网络,我强烈建议使用图像加载库,如毕加索或通用图像加载程序。目前它们仅在可绘图设备中,但我肯定希望最终通过网络完成。我将完全了解毕加索和uil,如果不写我自己的如果需要。我停止加载所有图像,但仍然有问题。还将每个开关案例设置为返回相同的片段,但仍然存在问题。因此,排除了导致问题的特定片段,或者是寻呼机适配器,因为我使用的是与AndroidStudio示例程序相同的寻呼机适配器。