Viewpager显示错误页面 [英] Viewpager shows wrong page

查看:93
本文介绍了Viewpager显示错误页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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 Fragments 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:


  1. 人们认为这是更有效地这样做的;或

  2. 系统参照片段可在以后需要的。

  1. People think it's more efficient to do it that way; or
  2. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆