まず、エラーが発生しません。私の問題は、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の質問に基づいたコードです:
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 は常に空です。
- なぜこれが起こっているのか知っていますか?
- メモリ制限のためですか?
instantiateItem()
または、onCreateは最初の 2 つでしか実行されないため、ページ 2 と 3 は決して膨張していないという別の仮定があります。(System.out.println(position);
0と1を印刷するものによって盗まれます)。