dro*_*ine 6 android android-viewpager viewpagerindicator
我有一个jake Wharton的viewpagerindicator,在那个viewpager我有6个页面.所有页面都包含listviews,我用AsyncTask加载它们.有时viewpager在错误的索引显示错误的页面.这是我的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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我创建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);
}
}
Run Code Online (Sandbox Code Playgroud)
这可能有什么问题?我该如何解决这个问题?感谢您的帮助
请不要Fragment
自己“缓存” s,因为它已经为您做到了这一点。
也就是说,您应该将newInstance
它们放在getItem
方法内部,而不是在创建适配器时。例子:
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);
}
Run Code Online (Sandbox Code Playgroud)
这样做的常见原因是:
Fragment
稍后可能需要参考。对于(1),正如我所说,你不需要担心它(除非你想学习它并稍后调整,但现在就这样吧)。如果你需要(2),那么你可以这样做(最初见这里)。
归档时间: |
|
查看次数: |
2943 次 |
最近记录: |