说明:个人使用ijkPlayer播放器(哔哩哔哩开源)、 注意点:默认不支持https格式在线视频、需要so库支持、 Ijk加载部分Https视频 前几秒会有播放过慢的情况。解决方案:https://blog.csdn.net/BirdEatBug/article/details/116665446?spm=1001.2014.3001.5501
实现步骤:1、继承 FragmentStateAdapter(activity/fragment) 、2、实现 getItemCount、createFragment()、getItemId()(为了刷新)。在createFragment()函数中返回Fragment对象。 以下为简单代码实例:
class VideoPagerAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
private val dataList = mutableListOf<VideoSelectFragment>()
fun addData(newData: MutableList<VideoSelectFragment>) {
if (newData.isNotEmpty()) {
val oldSize = dataList.size
dataList.addAll(newData)
notifyItemRangeInserted(oldSize, dataList.size)
}
}
fun addFirstData(newData: MutableList<VideoSelectFragment>) {
if (newData.isNotEmpty()) {
dataList.clear()
dataList.addAll(newData)
notifyDataSetChanged()
}
}
fun getData() = dataList
override fun getItemCount() = dataList.size
override fun createFragment(position: Int): Fragment {
return dataList[position]
}
override fun getItemId(position: Int): Long {
return dataList[position].hashCode().toLong()
}
}
坑总结:1、Fragment 嵌套Fragment 生命周期错乱。 原因FragmentStateAdapter(activity)传入错误参数、应改为FragmentStateAdapter(fragment);
2、ViewPager2 列表无法刷新问题。原因暂不知、需将getItemId() 的hashCode返回、作为唯一表示;参考如上代码、即可解决;
3、结合SmallRefreshLayout(第三方刷新库 用于滑动到顶部底部的判断、)下拉刷新时出现ViewPager2 不滚动底部问题,解决办法、等finishLoadMore()执行完毕后、延迟刷新ViewPager2。