0

サンプルの ViewPager プロジェクトをhttp://files.mail.ru/EZU6G4からダウンロードし、テスト アプリ用に変更しました。ダウンロードしたプロジェクトは、メイン アクティビティ Java ファイルの mViewPager.setAdapter(mFragmentsAdapter) の引数として FragmentStatePagerAdapter を使用し、問題なく動作します。

ただし、アプリで同じ mViewPager.setAdapter コードを使用しましたが、「setAdapter」部分に赤線が引かれ、次のメッセージが表示されます。

「ViewPager 型のメソッド setAdapter(PagerAdapter) は、引数 (MyFragmentStatePagerAdapter) には適用できません」

同じコードが 1 つのプロジェクトでは機能するのに、別のプロジェクトでは機能しないことに驚きました。その理由を見つけるのを手伝ってください。

参考までに、両方のプロジェクトで使用される ViewPager.java ファイルの setAdapter メソッドの定義を以下に示します。

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);
}
4

1 に答える 1

0

これはおそらく Android サポート ライブラリに関連しています。Fragmentそれを使用している場合は、標準の Android ディストリビューションではなく、必ずサポート ライブラリのクラスを使用してください。

于 2012-08-13T08:18:58.227 に答える