首先,我没有收到任何错误。我的问题是我在 ViewPager 中看不到第 2 和第 3 页(共 4 页)。让我解释:
首先,我直接在布局中添加页面,没有片段:
<android.support.v4.view.ViewPager
android:id="@+id/drawerPager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/page_start_one"
android:layout_width="match_parent"
android:layout_height="fill_parent" >
//3 textviews, 1 imageview
</RelativeLayout>
<RelativeLayout
android:id="@+id/page_start_two"
android:layout_width="match_parent"
android:layout_height="fill_parent" >
//1 textview, 1 imageview
</RelativeLayout>
<RelativeLayout
android:id="@+id/page_start_three"
android:layout_width="match_parent"
android:layout_height="fill_parent" >
//1 textview, 1 imageview
</RelativeLayout>
<RelativeLayout
android:id="@+id/page_start_four"
android:layout_width="match_parent"
android:layout_height="fill_parent" >
//3 textviews, 1 button
</RelativeLayout>
</android.support.v4.view.ViewPager>
我这样做是为了简单。现在我将寻呼机适配器加载到活动中:
WizardPagerAdapter adapter = new WizardPagerAdapter();
ViewPager pager = (ViewPager) findViewById(R.id.drawerPager);
pager.setAdapter(adapter);
当然还有定义WizardPagerAdapter
。您将在下面看到destroyItem()
它什么都不做,instantiateItem()
只是返回由 id 找到的视图。这是我基于这个 SO question的代码:
class WizardPagerAdapter extends PagerAdapter {
public RelativeLayout instantiateItem(View collection, int position) {
System.out.println(position);
int resId = 0;
switch (position) {
case 0:
resId = R.id.page_start_one;
break;
case 1:
resId = R.id.page_start_two;
break;
case 2:
resId = R.id.page_start_three;
break;
case 3:
resId = R.id.page_start_four;
break;
}
return (RelativeLayout) findViewById(resId);
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
}
@Override
public int getCount() {
return 4;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
}
正如我之前所说,使用此代码我只能在第 0 和第 1 页中看到等效的 RelativeLayouts,但第 2 和第 3 页始终是空的。
- 你知道为什么会这样吗?
- 是因为内存限制吗?
- 或者我的另一个假设是第 2 页和第 3 页从未被夸大过,因为 onCreate
instantiateItem()
仅针对前两个运行。(通过System.out.println(position);
打印 0 和 1 窃听)。