android kotlin 确保 viewPager2 pageItem resume 仅在屏幕上触发的当前方法是啥?

Posted

技术标签:

【中文标题】android kotlin 确保 viewPager2 pageItem resume 仅在屏幕上触发的当前方法是啥?【英文标题】:android kotlin what is the current way of make sure viewPager2 pageItem resume is fired only when onscreen?android kotlin 确保 viewPager2 pageItem resume 仅在屏幕上触发的当前方法是什么? 【发布时间】:2021-01-28 00:20:01 【问题描述】:

仅当 viewPager2 页面可见时,我才需要初始化任务(启动 countDownTimer)。 并在他们离开屏幕时停止计时器。 但是,我被困在 pageItem 屏幕外时会触发 resume() 的事实。

setUserVisibleHint 似乎已弃用,似乎 sexMaxLifeCycle 是当前的方式,但是,我不确定如何调用它, 不确定是否在...内调用它并且 onHiddenChanged() 也不起作用。

class ToneFragmentStateAdapter(activity:FragmentActivity):FragmentStateAdapter(activity)

fun setItems(newItems: List<Tone4>) 
    _items = newItems
    notifyDataSetChanged()


private var _items = listOf<Tone4>()

override fun getItemCount(): Int = _items.size

override fun createFragment(position: Int): Fragment
= TonePageFragment.newInstance(position, _items[position])

【问题讨论】:

代码似乎不完整。 【参考方案1】:

ViePager2 出于性能原因在屏幕外创建和附加片段。你可以做的是实现一个ViewPager2.OnPageChangeCallback,然后在你的片段上有一个方法告诉它是当前活动的片段。

例如

fun onPageSelected(position int) 
   adapter.items.forEachIndexed( index, fragment -> 
       fragment.setActive(position == index)
   

【讨论】:

onChangeCallBack 在用户从 A 滑到 B 时触发(如果成功),B 可以是 A-1 或 A+1。根据我的要求,我需要弄清楚用户是切换到 A-1 还是 A+1 甚至是 A(failure) 以在新的活动页面上重新激活我的计时器。简而言之,除非我错过了什么,否则这并没有多大帮助

以上是关于android kotlin 确保 viewPager2 pageItem resume 仅在屏幕上触发的当前方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

android使用Tablayout+viewpager2

Kotlin 实现三级菜单列表(左右滑动)+自定义ViewPager+三个ListView列表的功能

Kotlin 实现三级菜单列表(左右滑动)+自定义ViewPager+三个ListView列表的功能

BottomNavigationView+ViewPager+Fragment 底部导航按钮 kotlin版本

BottomNavigationView+ViewPager+Fragment 底部导航按钮 kotlin版本

Android ViewPager 控制滑动速度