1

Android で ViewPager を試してみたところ、メインのアクティビティで onCreate() が完了するまで、 PagerAdapter が「ページ」ビューをインスタンス化しないことに気付きました。これにより、メイン アクティビティからのレイアウト ウィジェットまたはコールバックにリスナーを接続することが不可能になっているようです。PagerAdapter からインスタンス化されたビューにアクセスするためにフックできる onCreate() の後に呼び出されるメソッドはありますか? OnPostResume() と OnPostCreate()が呼び出されないようです。

主な活動

public class mainApp extends Activity
{
    protected void onCreate (Bundle savedInstanceState)
    {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.main);

        mAdapter = new MyPagerAdapter ();
        mPager = (ViewPager) findViewById (R.id.myfivepanelpager);
        mPager.setAdapter (mAdapter);
        mPager.setCurrentItem (1);

        /* here, I would like to be able to inflate the views 
         * instantiated in mAdapter, however they have not been 
         * instantiated yet even though setCurrentItem() has been called */
    }

    ...
}

PagerAdapter

public class MyPagerAdapter extends PagerAdapter
{
    private String TAG = "** MyPagerAdapter **";
    View vscreen1;
    View vscreen2;

    @Override
    public int getCount ()
    {
        return 2;
    }


    @Override
    public int getItemPosition (Object object)
    {
       return super.getItemPosition (object);
    }


    public Object instantiateItem (View collection, int position)
    {
        LayoutInflater inflater = (LayoutInflater) collection.getContext ().getSystemService (Context.LAYOUT_INFLATER_SERVICE);
        int resId = 0;

        switch (position)
        {
            case 0:
                  resId = R.layout.screen1;
                        Log.d (TAG, "screen1");
                  // tie in button callbacks here for screen1
            break;

            case 1:
                        resId = R.layout.screen2;                               
                        Log.d (TAG, "screen2");
                  // tie in button callbacks here for screen2
            break;
        }

        View view = inflater.inflate (resId, null);
        ((ViewPager) collection).addView (view, 0);


        return view;
    }

   ...

}   
4

0 に答える 0