PagerAdapter VS FragmentStatePagerAdapter [英] PagerAdapter vs FragmentStatePagerAdapter

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

问题描述

我从网上下载 http://files.mail.ru/EZU6G4 样本ViewPager项目,修改了它为我的测试应用程序。我下载了该项目采用FragmentStatePagerAdapter作为主要活动Java文件中mViewPager.setAdapter(mFragmentsAdapter)的说法,并且工作得很好。

不过,我用我的应用程序相同的mViewPager.setAdapter code,但setAdapter部分是红线,我得到以下信息。

,在类型ViewPager方法setAdapter(PagerAdapter)是不适用的参数(MyFragmentStatePagerAdapter)

我很惊讶,同样的code在一个项目工作,但不是在另一个。请帮我看看,为什么它是。

供您参考,下面是这两个项目使用ViewPager.java文件中的setAdapter方法​​定义。

 公共无效setAdapter(PagerAdapter适配器){
    如果(mAdapter!= NULL){
        mAdapter.setDataSetObserver(NULL);
        mAdapter.startUpdate(本);
        的for(int i = 0; I< mItems.size();我++){
            最终ItemInfo二= mItems.get(ⅰ);
            mAdapter.destroyItem(这一点,ii.position,ii.object);
        }
        mAdapter.finishUpdate(本);
        mItems.clear();
        removeAllViews();
        mCurItem = 0;
        scrollTo(0,0);
    }    mAdapter =适配器;    如果(mAdapter!= NULL){
        如果(mObserver == NULL){
            mObserver =新DataSetObserver();
        }
        mAdapter.setDataSetObserver(mObserver);
        mPopulatePending = FALSE;
        如果(mRestoredCurItem> = 0){
            mAdapter.restoreState(mRestoredAdapterState,mRestoredClassLoader);
            setCurrentItemInternal(mRestoredCurItem,假的,真正的);
            mRestoredCurItem = -1;
            mRestoredAdapterState = NULL;
            mRestoredClassLoader = NULL;
        }其他{
            填充();
        }
    }

ViewPagerActivity.java

 公共类ViewPagerActivity扩展FragmentActivity {
公共静态最后的字符串标记=ViewPagerActivity;
私人MyFragmentStatePagerAdapter mFragmentsAdapter;
私人ViewPager mViewPager;@覆盖
    公共无效的onCreate(捆绑savedInstanceState){
            super.onCreate(savedInstanceState);            的setContentView(R.layout.main);            mFragmentsAdapter =新MyFragmentStatePagerAdapter(getSupportFragmentManager());
            mViewPager =(ViewPager)findViewById(R.id.myfivepanelpager);            mViewPager.setAdapter(mFragmentsAdapter);
}


解决方案

这可能与Android的支持库。如果您使用的是,请确保您使用片段类从支持的lib,而不是标准的Andr​​oid分配。

I downloaded a sample ViewPager project from http://files.mail.ru/EZU6G4, and modified it for my test app. The project I downloaded uses FragmentStatePagerAdapter as the argument in mViewPager.setAdapter(mFragmentsAdapter) in the main activity java file, and works just fine.

However, I used the same mViewPager.setAdapter code in my app, but the "setAdapter" part is redlined and I get the following message.

"The method setAdapter(PagerAdapter) in the type ViewPager is not applicable for the arguments (MyFragmentStatePagerAdapter)"

I'm surprised that the same code works in one project, but not in another. Please help me find why it is.

For your reference, below is the setAdapter method definition in the ViewPager.java file that both projects use.

public void setAdapter(PagerAdapter adapter) {
    if (mAdapter != null) {
        mAdapter.setDataSetObserver(null);
        mAdapter.startUpdate(this);
        for (int i = 0; i < mItems.size(); i++) {
            final ItemInfo ii = mItems.get(i);
            mAdapter.destroyItem(this, ii.position, ii.object);
        }
        mAdapter.finishUpdate(this);
        mItems.clear();
        removeAllViews();
        mCurItem = 0;
        scrollTo(0, 0);
    }

    mAdapter = adapter;

    if (mAdapter != null) {
        if (mObserver == null) {
            mObserver = new DataSetObserver();
        }
        mAdapter.setDataSetObserver(mObserver);
        mPopulatePending = false;
        if (mRestoredCurItem >= 0) {
            mAdapter.restoreState(mRestoredAdapterState, mRestoredClassLoader);
            setCurrentItemInternal(mRestoredCurItem, false, true);
            mRestoredCurItem = -1;
            mRestoredAdapterState = null;
            mRestoredClassLoader = null;
        } else {
            populate();
        }
    }

ViewPagerActivity.java

public class ViewPagerActivity extends FragmentActivity {


public static final String TAG = "ViewPagerActivity";
private MyFragmentStatePagerAdapter mFragmentsAdapter ;
private ViewPager mViewPager ;

@Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

            mFragmentsAdapter = new MyFragmentStatePagerAdapter(getSupportFragmentManager());
            mViewPager = (ViewPager) findViewById(R.id.myfivepanelpager);

            mViewPager.setAdapter(mFragmentsAdapter);
}

解决方案

This is probably related to the Android Support Library. If you are using that, make sure you use the Fragment classes from the support lib instead of the standard Android distribution.

这篇关于PagerAdapter VS FragmentStatePagerAdapter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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