【发布时间】:2020-04-13 13:54:29
【问题描述】:
ViewPager 发布 1.0.0 版本
对于普通的 RecyclerView,holder.itemView 为我提供当前绑定/呈现的视图。
但是,FragmentStateAdapter 的 holder.itemView 只给了我一个 FrameLayout
我的 ViewPager 适配器:
class MyFragmentStateAdapter(activity: FragmentActivity) :
FragmentStateAdapter(activity) {
var items = mutableListOf<String>()
override fun createFragment(position: Int): MyPageFragment {
val itemText = items[position]
return MyPageFragment.create(itemText)
}
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(
holder: FragmentViewHolder,
position: Int,
payloads: MutableList<Any>
) {
super.onBindViewHolder(holder, position, payloads)
val fragment = ??? as MyRefreshableInterface
fragment.refresh()
}
fun update(mutableListOf: MutableList<String>) {
this.items = mutableListOf
notifyDataSetChanged()
}
}
上下文
我有少量且固定数量的选项卡显示用户配置文件的不同信息部分。在某些事件中,我需要尽快自动刷新所有选项卡。换句话说,除了用户正在查看的当前选项卡之外,我还需要刷新当前隐藏的选项卡。
ASAP = 用户下次访问当前隐藏的标签时。用户去那里,他们首先看到的是加载动画。挺好的
为什么不马上?
因为隐藏的碎片可能会被分离/破坏。无论如何,用户现在没有在看。将所有碎片都保存在内存中也很昂贵
当用户导航到上一个隐藏选项卡说 地址,onBindViewHolder 将被触发(这与 ViewPager 1 相比很棒)但是,差距是我没有参考当前选择的片段
其他发现
我已经尝试引用 fragmentActivity.supportFragmentManager.fragments,但它似乎最多有 4 个片段,而我有 6 个片段/页面,为了测试
【问题讨论】:
标签: android android-fragments android-viewpager android-fragmentactivity android-viewpager2