android - ViewPager onPageSelected 用于第一页

标签 android android-viewpager

所以看起来当使用 ViewPager 时,onPageSelected 监听器不会被调用为第一页与 this 相同的问题.

我有一些逻辑可以为当前选定的页面填充一些更昂贵的 UI 元素,并且在页面更改时可以使用,但 它不适用于第一页。

如果我在监听器之后设置当前项,则第一页会触发回调,但 View 尚未初始化,因此我无法对其进行操作:

// 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 尚未运行。所以我想我的问题是,在 Activity 生命周期的哪个阶段,我可以确定 ViewPager 已经初始化了 View ?我尝试在 Activity.onAttachedToWindowActivity.onResume 中执行此操作,但似乎这两个都在 PagerAdapter.instantiateItem 之前被触发。

最佳答案

我想知道为什么您不只是在 Fragment 本身而不是在托管 Activity 中提到的逻辑。 ViewPager 在当前 fragment 的任一侧缓冲几个 fragment ,因此它们在后台设置,并在用户滑动到它们时准备就绪。将逻辑放入 onPageSelected 将意味着绕过此功能,并且在用户滑动到页面之前不会执行繁重的工作。

假设由于某种原因您不能执行上述操作,为什么不使用 Interface with a callback function .在 fragment 的 onCreateView 函数中触发回调,让 Activity 知道它已完全实例化。

关于android - ViewPager onPageSelected 用于第一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12154870/

相关文章:

java - 如何将谷歌地图/代码放入viewpager中

android - Android 3.x及以上版本访问Native Codecs

java - 将 Bitmap 转换为 Bitmap[] 数组

android - 从 Firebase 自动发送通知

android - ScrollView 在 Android Studio 中显示内容但在应用程序中不显示

android - '非法状态异常 : Activity has been destroyed' when 'getSupportFragmentManager()' called after Activity restart

java - Runnable 不再在 Service 中运行以定期从 URL 检索

java - 当我从一个 fragment 滑动到另一个 fragment 时如何做一个事件

android-layout - CoordinatorLayout不适用于ViewPager中Fragment中的NestedScrollView

android - 循环 FragmentPagerAdapter