Android View寻呼机适配器显示空屏幕

时间:2014-07-19 09:19:21

标签: android android-fragments android-pageradapter

我正在Fragment中实施Pager Adapter。当我第一次加载屏幕时,它工作正常。如果我切换到其他片段并再次转到上一个片段,它会显示空屏幕。如果我在不同的点击之间滑动并再次移动到第一个标签,则会显示数据。

我认为在向后移动可见的标签时并没有加载数据,但在滑动导航期间,一旦它们不在视图范围内,它就会加载数据。

这是我的寻呼机适配器

public class MyPagerAdapter extends FragmentPagerAdapter {

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {
        switch (index) {
        case 0:
            return new Fragment1();
        case 1:
            return new Fragment2();
        case 2:
            return new Fragment3();
        case 3:
            return new Fragment4();
        case 4:
            return new Fragment5();
        case 5:
            return new Fragment6();
        }

        return null;
    }

    @Override
    public int getCount() {
        return 6;
    }
}

我正在设置我的适配器:

viewPager = (ViewPager) rootView.findViewById(R.id.my_pager);
        mAdapter = new MyPagerAdapter(getActivity().getSupportFragmentManager());
        viewPager.setAdapter(mAdapter);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        

6 个答案:

答案 0 :(得分:36)

只需检查您是否使用getFragmentManager()初始化适配器,请尝试使用getChildFragmentManager(),如下所示:

   mAdapter = new MyPagerAdapter(getChildFragmentManager());
        viewPager.setAdapter(mAdapter);

答案 1 :(得分:16)

使用此,

public class MyPagerAdapter extends android.support.v4.app.FragmentStatePagerAdapter

答案 2 :(得分:1)

我遇到了同样的问题,并为此浪费了一整天。因此,我正在为我的问题发布解决方案,这样其他人就不必为挣扎而浪费很多时间。

我的问题是viewpager中的片段被调用(调试器被命中),但是我无法在视图中看到它(即使是第一次)。

问题是:

  1. ViewPager的父级是片段。

我不得不使用getChildFragmentManager()而不是getFragmentManager()

  1. 父片段的父对象是 NestedScrollView (片段所在的活动)。

由于某些原因,即使我们将viewpager的高度和宽度保持为matchparent,也不会被拾取,并且默认设置为0(即使在xml)。 要解决此问题,我们必须在您的NestedScrollView中添加android:fillViewport="true"

希望有人会对此有所帮助:)

答案 3 :(得分:0)

因为您不允许嵌套片段。

Fragments within Fragments

将您的类更改为扩展FragmentActivity,它应该可以正常工作

答案 4 :(得分:0)

我的ViewPager在片段中。 我通过将FragmentPagerAdapter更改为FragmentStatePagerAdapter来解决此问题,并使用getFragmentManager()。 它运作正常;

答案 5 :(得分:-1)

使用FragmentStatePagerAdapter代替FragmentPagerAdapter

并在设置适配器

后添加此行
viewPager.setOffscreenPageLimit(6);\\ add the number of fragments you have

这将记住内存中的片段,它永远不会显示空白屏幕。但请记住,这会将每个页面的数据保存在内存中,因此请相应地使用它。