【发布时间】:2012-08-28 07:46:15
【问题描述】:
所以看来,当使用 ViewPager 时,onPageSelected 侦听器不会为第一页调用与this 相同的问题。
我有一些逻辑可以为当前选择的页面填充一些更昂贵的 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 最终为空,因为PagerAdapter.instantiateItem 尚未运行。所以我想我的问题是,在活动生命周期的哪个阶段,我可以确定 ViewPager 已经初始化了视图?我尝试在 Activity.onAttachedToWindow 和 Activity.onResume 内执行此操作,但似乎这两个都在 PagerAdapter.instantiateItem 之前被解雇。
【问题讨论】: