したがって、ViewPagerを使用する場合、onPageSelectedリスナーは、これと同じ問題の最初のページに対して呼び出されないようです。
現在選択されているページのより高価なUI要素を設定するロジックがいくつかあります。これは、ページが変更されたときに機能しますが、it doesn't work for the first page.
リスナーの後に現在のアイテムを設定すると、最初のページに対してコールバックが発生しますが、ビューはまだ初期化されていないため、操作できません。
// Inside PagerAdapter.instantiateItem
ViewHolder vh = new ViewHolder();
cursor.moveToPosition(position);
vh.view = adapter.newView(context, cursor, null);
// Set position as tag so we can retrieve it with findViewByTag
vh.view.setTag(position);
((ViewPager) collection).addView(vh.view,0);
return vh;
// Inside MyActivity.onCreate
pagerAdapter = new SingleMessagePagerAdapter(this, cursor);
pager = (ViewPager)findViewById(R.id.message_pager);
pager.setAdapter(pagerAdapter);
pager.setOnPageSelectedListener(this);
pager.setCurrentItem(selectedItem);
// Inside MyActivity.onPageSelected
// Retrieve tagged view
View view = pager.findViewWithTag(position);
まだ実行されていないため、ここでview
はnullになります。PagerAdapter.instantiateItem
ですから、私の質問は、アクティビティライフサイクルのどの時点で、ViewPagerがビューを初期化したことを確認できるかということだと思います。内部Activity.onAttachedToWindow
でこれを試してみActivity.onResume
ましたが、どちらも以前に解雇されたようPagerAdapter.instantiateItem
です。