看起来在使用ViewPager时,onPageSelected监听器不会对第一页调用,与此问题相同。
我有一些逻辑来填充当前选定页面的一些更昂贵的UI元素,在页面更改时这些逻辑可以正常工作,但是在第一页时它不起作用。
如果我在监听器之后设置当前项,回调将为第一页触发,但是视图尚未初始化,因此我无法操作它:
// 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
之前触发。