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;
}
...
}