0

まず、エラーが発生しません。私の問題は、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を印刷するものによって盗まれます)。
4

1 に答える 1

0

viewpager がデフォルトで 2 ページしかキャッシュしないためと考えられます。

次の方法で変更できます。 pager.setOffscreenPageLimit(X);

ここで、「X」はページ数です。

于 2014-10-16T10:48:30.213 に答える