PagerAdapter VS FragmentStatePagerAdapter [英] 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,而不是标准的Android分配。
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屋!