我正在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);
答案 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
中的片段被调用(调试器被命中),但是我无法在视图中看到它(即使是第一次)。
问题是:
我不得不使用getChildFragmentManager()
而不是getFragmentManager()
。
由于某些原因,即使我们将viewpager
的高度和宽度保持为matchparent
,也不会被拾取,并且默认设置为0(即使在xml)。
要解决此问题,我们必须在您的NestedScrollView中添加android:fillViewport="true"
希望有人会对此有所帮助:)
答案 3 :(得分:0)
答案 4 :(得分:0)
我的ViewPager在片段中。 我通过将FragmentPagerAdapter更改为FragmentStatePagerAdapter来解决此问题,并使用getFragmentManager()。 它运作正常;
答案 5 :(得分:-1)
使用FragmentStatePagerAdapter
代替FragmentPagerAdapter
并在设置适配器
后添加此行viewPager.setOffscreenPageLimit(6);\\ add the number of fragments you have
这将记住内存中的片段,它永远不会显示空白屏幕。但请记住,这会将每个页面的数据保存在内存中,因此请相应地使用它。