ViewPager幻灯片正在跳过第一个和最后一个片段
问题描述:
Hy,我是Android开发应用程序的新手,我想用tabLayout创建一个使用视图寻呼机的应用程序。我也有一个包含列表的片段,我想创建这个片段每个页面上都有不同的数据,具体取决于所选的标签。我几乎实现了这一点,但我在viewPager页面创建时遇到了问题。我ViewPagerAdapter extemds FragmentStatePagerAdapter,它看起来像这样:ViewPager幻灯片正在跳过第一个和最后一个片段
public class ViewPagerAdapter extends FragmentStatePagerAdapter{
static final int NUM_ITEMS = 7;
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Log.e("new instance",position+"");
Fragment fragment=null;
switch (position)
{
case 0: fragment=new ChannelListFragment();
Log.e("new instance ",position+"");
break;
case 1: fragment= new ChannelListFragment();
Log.e("new instance ",position+"");
break;
case 2: fragment=new ChannelListFragment();
Log.e("new instance ",position+"");
break;
case 3: fragment=new ChannelListFragment();
Log.e("new instance ",position+"");
break;
case 4: fragment=new ChannelListFragment();
Log.e("new instance ",position+"");
break;
case 5: fragment=new ChannelListFragment();
Log.e("new instance ",position+"");
break;
case 6: fragment=new ChannelListFragment();
Log.e("new instance ",position+"");
break;
}
return fragment;
}
@Override
public int getCount() {
return NUM_ITEMS;
}
}
在我的MainActivity我这样做:
viewPager = (ViewPager) findViewById(R.id.pager);
final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
问题上刷卡网页:在活动第一次创建,在日志中我看到为第一个页面创建位置0和位置1,然后为第二个标签创建位置2,为第三个标签创建位置3,为第六个标签创建位置3,为最后一个创建位置4。在回滚时,创建4,3,2,1,0,第一个片段没有任何内容。这会在根据选定选项卡设置数据时影响应用程序的功能。 你能否帮我解决这个问题,让寻呼机在页面上创建一个片段,包括项目0和项目6,最后一个?
答
viewPager = (ViewPager) findViewById(R.id.pager);
final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager) // link the given ViewPager and this TabLayout together so that changes in one are automatically reflected in the other
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
}
默认情况下,当前页面的两侧被创建和缓存,使有一个良好的用户体验,当用户滚动当前页面左边或右边。 在你的情况下,当第一页加载时(第1页和第2页被创建) 当你滑到第2页时,1和2已经在内存中,因此只有页面向右,即第三页被加载等等。
请访问link了解更多信息。
此外,tablayout提供了一个方便的方法setUpWithViewPager用于链接viewpager和tablayout。您可以使用此方法而不是手动设置当前项目。
可能重复的[刷新ViewPager片段中的数据](http://stackoverflow.com/questions/36503779/refresh-data-in-viewpager-fragment)基本上,ViewPager保持当前片段和片段在任一侧活着以保持快速滑动。如果您在加载时需要在每个片段中执行某些操作,请使用链接答案中描述的方法。 –