サンプルの 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);
}