片段不显示任何内容

时间:2017-04-18 00:30:10

标签: android android-fragments

我正在开发一个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.

为什么会这样?是由于内存限制吗?

1 个答案:

答案 0 :(得分:2)

你是对的:记忆约束。与您的特定设备标签或API没有直接关系。请参阅:https://stackoverflow.com/a/12538927/5885018