因此,当使用 ViewPager 时,不会为第一页调用 onPageSelected 侦听器,问题与this http://code.google.com/p/android/issues/detail?id=27526.
我有一些逻辑为当前选定的页面填充一些更昂贵的 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);
Here view
最终为空,因为PagerAdapter.instantiateItem
尚未运行。所以我想我的问题是,在活动生命周期的哪个点我可以确定 ViewPager 已经初始化了视图?我尝试在里面做这个Activity.onAttachedToWindow
and Activity.onResume
但看来这两个人之前都被解雇了PagerAdapter.instantiateItem
.
我想知道为什么你不只拥有片段本身而不是托管活动中提到的逻辑。 ViewPager 会在当前片段的两侧缓冲几个片段,因此它们会在后台设置,并在用户滑动到它们时准备就绪。把逻辑放进去onPageSelected
意味着绕过此功能,并且在用户滑动到页面之前不执行繁重的工作。
假设由于某种原因你无法执行上述操作,为什么不使用带有回调函数的接口 http://developer.android.com/training/basics/fragments/communicating.html。在fragment中触发回调onCreateView
函数让 Activity 知道它已完全实例化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)