【问题标题】:Android View Pager Adapter shows empty screenAndroid View Pager Adapter 显示空白屏幕
【发布时间】:2014-07-19 09:19:21
【问题描述】:

我正在Fragment 中实现寻呼机适配器。当我第一次加载屏幕时,它工作正常。如果我切换到其他片段并再次转到上一个片段,它将显示空白屏幕。如果我在不同的点击之间滑动并再次移动到第一个标签,那么它会显示数据。

我认为在向后移动可见的选项卡时不会加载数据,但是一旦在滑动导航期间它们不在视野范围内,它就会加载数据。

这是我的寻呼机适配器

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

【问题讨论】:

标签: android android-fragments android-pageradapter


【解决方案1】:

只需检查您是否使用getFragmentManager() 来初始化适配器,尝试像这样使用getChildFragmentManager()

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

【讨论】:

  • 我不敢相信这行得通!为什么?!这些问题在 Android 中非常令人沮丧。
  • 也希望得到解释。花了几个小时试图追查这个问题并修复它。我想我需要阅读 ChildFragmentManager。
  • 我认为是因为您在嵌套片段中对其进行了初始化。
  • 在文档中,getChildFragmentManager() 的定义是:getChildFragmentManager() 返回一个私有的 FragmentManager,用于在该 Fragment 中放置和管理 Fragment。而getSupportFragmentManager()的定义是: getSupportFragmentManager() 返回与该fragment的activity关联的fragment进行交互的FragmentManager。
【解决方案2】:

使用这个,

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

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,为此浪费了一整天。因此,我发布了针对我的问题的解决方案,以便其他人不必费力和浪费大量时间。

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

    问题是:

    1. ViewPager 的父级是 Fragment。

    我必须使用getChildFragmentManager() 而不是getFragmentManager()

    1. Parent Fragment 的父级是 NestedScrollView(填充 Fragment 的 Activity)。

    由于某种原因,即使我们将viewpager 的高度和宽度保持为matchparent,它也不会被拾取并默认为0(即使它已填充在xml 的预览中)。 要解决这个问题,我们必须在您的 NestedScrollView 中添加 android:fillViewport="true"

    希望有人会觉得这很有帮助:)

    【讨论】:

      【解决方案4】:

      因为你不允许有嵌套的片段。

      Fragments within Fragments

      将您的课程更改为扩展FragmentActivity,它应该可以工作

      【讨论】:

        【解决方案5】:

        我的 ViewPager 位于片段中。 我通过将 FragmentPagerAdapter 更改为 FragmentStatePagerAdapter 解决了这个问题,并且还使用了 getFragmentManager()。 它工作正常;

        【讨论】:

          【解决方案6】:

          使用FragmentStatePagerAdapter 代替FragmentPagerAdapter

          并在设置适配器后添加此行

          viewPager.setOffscreenPageLimit(6);\\ add the number of fragments you have
          

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

          【讨论】:

            猜你喜欢
            • 2013-08-25
            • 1970-01-01
            • 2016-08-03
            • 2013-10-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多