我有一个MainActivity,在FragmentPagerAdapter中有三个片段,如下所示.如何查看用户从第一个片段到第二个片段,或从第二个到第三个,通过滑动或点击标签?我看到getItem()方法总是没有被调用,因为我已经声明了mViewPager.setoffscreenPageLimit(2);
public class MainThreeTabAdapter extends FragmentPagerAdapter { private final String[] CONTENT = new String[]{"News","Rewards","Me"}; public MainThreeTabAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { if (position == 0) { return NewsFragment.newInstance(); } else if (position == 1) { return RewardsFragment.newInstance(); } else if (position == 2) { return MeFragment.newInstance(true,App.getAccountData().getId()); } else { return null; } } @Override public CharSequence getPageTitle(int position) { return CONTENT[position % CONTENT.length]; } @Override public int getCount() { return CONTENT.length; } }
在MainActivity的onCreate()
mainThreeTabAdapter = new MainThreeTabAdapter(getFragmentManager()); // Set up the ViewPager with the sections adapter. // this ensures that 2 tabs on each side of current are kept in memory,which is all we need for our case. Default = 1 // this is all taken from the Quickreturn facebook sample app mViewPager.setoffscreenPageLimit(2); mViewPager.setAdapter(mainThreeTabAdapter);
解决方法
仅在创建视图时调用getItem()方法.要理解为什么getItem()不被调用,它有助于了解ViewPager的默认行为.默认情况下,当您在ViewPager的特定页面上时,还会创建该特定页面之前和之后的页面.如果你有3个片段被命名,并且按照这个顺序[a,b,c],并且你在第b页,由于ViewPager的默认行为,a和c将已经通过调用getItem(int ).因为这些片段已经被创建,所以你不会再调用getItem()
另外:这个行为可以用ViewPager.setOffScreenLimit()
修改
当用户切换页面时,您实际想要通知的是使用ViewPager.addOnPageChangeListener()
将OnPageChangeListener
设置为ViewPager,以便在选择页面时收到通知.
原文地址:https://www.jb51.cc/android/311115.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。