android-viewpager - android Viewpager显示错误页面

  显示原文与译文双语对照的内容
110 0

在我的viewpagerindicator中,我有两个页面,在错误的indexes.Here 中装载了错误的页面,下面是我的viewpager适配器。

public class TestFragmentAdapter extends FragmentPagerAdapter{
 protected static final String[] CONTENT = new String[] {"a","b","c","d","e","f" };
 private int mCount = CONTENT.length;
 Fragment fragment1,fragment2,fragment3,fragment4,fragment5,fragment6;
 public TestFragmentAdapter(FragmentManager fm) {
 super(fm);
 fragment1 = new CategoryListView();
 fragment2 = CustomizedListviewRecent.newInstance(41);
 fragment3 = CustomizedListviewMostRecents.newInstance(0);
 fragment4 = CustomizedListviewPopulars.newInstance();
 fragment5 = CustomizedListviewRecent.newInstance(42);
 fragment6 = CustomizedListviewRecent.newInstance(43);
 }
 @Override
 public Fragment getItem(int position) {
 if(position == 0)
 return fragment1;
 else if(position == 1)
 return fragment2;
 else if(position == 2)
 return fragment3;
 else if(position == 3)
 return fragment4;
 else if(position == 4)
 return fragment5;
 else
 return fragment6;
 }
 @Override
 public int getCount() {
 return mCount;
 }
 @Override
 public CharSequence getPageTitle(int position) {
 return TestFragmentAdapter.CONTENT[position % CONTENT.length];
 }
 public void setCount(int count) {
 if (count> 0 && count <= 10) {
 mCount = count;
 notifyDataSetChanged();
 }
 }
}

下面是我创建viewpager的方法:

public class SampleTitlesDefault extends BaseSampleActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
 mPager = (ViewPager)findViewById(R.id.pager);
 mPager.setAdapter(mAdapter);
 mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
 mIndicator.setViewPager(mPager);
 mIndicator.setCurrentItem(1);
 }
}

这里有什么问题我如何解决这里问题感谢你的帮助?

时间:原作者:0个回答

55 3

我知道太晚了,但可能有人需要它。

由于错误的位置和时间,我也遇到了类似的问题,因为在两个 Fragments 中通过用替换 FragmentPagerAdapter 来解决问题

我还使用 OnPageChangeListener inteface从 onPageScrolled 方法传递了索引位置

 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
 @Override
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 }
 @Override
 public void onPageSelected(int position) {
 bundle = new Bundle();
 bundle.putInt("position", position);
 primaryFragment.setCurrentPostionAndData(position);
 }
 @Override
 public void onPageScrollStateChanged(int state) {
 }
 });

像文档一样,以这种方式思考。如果你要像一个书籍阅读器一样做一个应用程序,你就不想一次把所有的Fragments 加载到内存中。你希望在用户读取 Fragments 时加载和销毁。在本例中,你将使用 FragmentStatePagerAdapter 。如果只显示 3个不包含大量重数据( 像位图)的"制表符",那么FragmentPagerAdapter可以能适合你。另外,记住ViewPager默认将加载 3 Fragments 到内存中。提到的第一个适配器可能破坏视图层次结构并在需要时加载它,如果用户再次回到该页面,则第二个适配器将保存该状态,如果用户返回该页面,则返回状态。

FragmentPagerAdapter与FragmentStatePagerAdapter之间的差异

原作者:
...