我正在开发一个Android项目。我发现了viewpager和片段的奇怪行为。一旦加载了viewpager中的多个片段,一些片段在一段时间内通常不会显示任何内容,通常超过10秒。之后,内容再次正确显示。
这就是我所拥有的:
它的UI使用的MainActivity只包含一个viewpager mMainPager。
private void setupViewPager() {
mMainPageAdapter = new MainPageAdapter(getSupportFragmentManager());
mMainPager.setAdapter(mMainPageAdapter);
mMainPager.addOnPageChangeListener(this);
mMainPager.setOnSwipeOutListener(this);
}
MainPageAdapter在MainActivity中定义如下。它有4个片段:
private class MainPageAdapter extends FragmentStatePagerAdapter {
public MainPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUMBER_OF_PAGES;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return Fragment0.newInstance();
case 1:
return Fragment1.newInstance();
case 2:
return Fragment2.newInstance();
default:
return Fragment3.newInstace();
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
}
Fragment3有一个嵌套在里面的viewpager。该viewpager包含4个片段。
ChatsViewPager pagerChats;
适配器使用com.ogaclejapan.smarttablayout.utils.v4
FragmentStatePagerItemAdapter adapterSegChat = new FragmentStatePagerItemAdapter(getChildFragmentManager(), FragmentPagerItems.with(getActivity())
.add(getString(R.string.string0), Fragment30.class)
.add(getString(R.string.string1), Fragment31.class)
.add(getString(R.string.string2), Fragment32.class)
.add(getString(R.string.string3), Fragment33.class)
.create());
pagerChats.setAdapter(adapterSegChat);
启动MainActivity后,会显示Fragment 2。如果用户滑动到Fragment3,则pagerChats中的所有四个片段都会正确显示。滑动可以在这4个片段之间平滑过渡。
然而,一旦用户滑动到Fragment0和Fragment1然后再回到Fragment3,四个片段中的2个,pagerChats中的Fragment32和Fragment33就不再显示了。没有错误,没有冻结。它们只是显示一个空白屏幕。
用户等待超过10秒后,Fragment32和Fragment33的内容会显示出来。
如果用户重复上述过程,则会再次发生同样的事情。
这是使用三星S7,运行API 24.
为什么会这样?是由于内存限制吗?