Viewpager显示错误页面 [英] Viewpager shows wrong page
问题描述
我有一个viewpagerindicator由Jake沃顿商学院和在viewpager我有网页6 pages.All包含列表视图和我加载它们与AsyncTask.Sometimes viewpager显示了错误的indexes.Here错误页面是我viewpager适配器:
I have a viewpagerindicator by Jake Wharton and in that viewpager i have 6 pages.All of the pages contains listviews and i'm loading them with an AsyncTask.Sometimes viewpager shows wrong pages at wrong indexes.Here is my viewpager adapter:
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:
Here is how i create my 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);
}
}
可以是什么问题就在这里?我该如何解决呢?感谢您的帮助。
What can be problem here?How can i solve this?Thanks for your help
推荐答案
请不要缓存的片段
取值自己,因为它已经不适合您。
Please don't "cache" the Fragment
s yourself because it already does that for you.
这就是说,你应该的newInstance
他们的getItem
方法里面,的不的在创建适配器。例如:
That said, you should newInstance
them inside the getItem
method, and not when creating the adapter. Example:
public TestFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if(position == 0)
return new CategoryListView();
else if(position == 1)
return CustomizedListviewRecent.newInstance(41);
else if(position == 2)
return CustomizedListviewMostRecents.newInstance(0);
else if(position == 3)
return CustomizedListviewPopulars.newInstance();
else if(position == 4)
return CustomizedListviewRecent.newInstance(42);
else
return CustomizedListviewRecent.newInstance(43);
}
常见原因要做到这一点是:
Common reasons to do that are:
- 人们认为这是更有效地这样做的;或
- 系统参照
片段
可在以后需要的。
- People think it's more efficient to do it that way; or
- A reference to the
Fragment
may be needed later on.
有关(1),正如我所说,你不必担心它(除非你想了解它,后来调整,但现在随它去吧)。如果你需要(2),那么你可以做这(最初看到的这里)。
For (1), as I said, you don't need to worry about it (unless you want to learn it and tweak later, but for now let it be). And if you need (2), then you can do this (originally seen here).
这篇关于Viewpager显示错误页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!