ViewPager加载数据第一次不显示问题

啊Abu 2016-07-03 09:58:41
需求是这样 ViewPager加载多个SurfaceView 通过滑动显示不同的SurfaceView , SurfaceView 是用来播放视频的,在ViewPager加载数据时Surface播放的视频已经初始化好,但是 现在问题是第一次显示时Viewpager没有图像(SurfaceView没有显示),这时滑动到第二页,再滑动到第一页时,第一页的视频才正常播放。《这是ViewPager取消预加载时》
在ViewPager没有取消预加载时,如果有三个页面,滑动Viewpager从1到3,这时候三个页面都不会显示,再从3滑动到1,这时1页面会显示,滑动到2,2页面没有视频,滑动到3,3页面有视频,弟二个页面就想没有加载数据一样。

这个问题已经困扰好几天 希望有大神给以指导 多谢 多谢
...全文
943 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
laujiangtao 2020-07-28
  • 打赏
  • 举报
回复
引用 楼主 啊Abu 的回复:
需求是这样 ViewPager加载多个SurfaceView 通过滑动显示不同的SurfaceView , SurfaceView 是用来播放视频的,在ViewPager加载数据时Surface播放的视频已经初始化好,但是 现在问题是第一次显示时Viewpager没有图像(SurfaceView没有显示),这时滑动到第二页,再滑动到第一页时,第一页的视频才正常播放。《这是ViewPager取消预加载时》 在ViewPager没有取消预加载时,如果有三个页面,滑动Viewpager从1到3,这时候三个页面都不会显示,再从3滑动到1,这时1页面会显示,滑动到2,2页面没有视频,滑动到3,3页面有视频,弟二个页面就想没有加载数据一样。 这个问题已经困扰好几天 希望有大神给以指导 多谢 多谢
楼主这个问题很可能是因为初始化adapter的时候传入的数据为null,等请求数据成功之后才初始化数据,然后刷新的adapter,这样切换不同页面再切换回来,fragment并没有重新创建,使用的还是第一次请求数据成功之后初始化的对象。这样会出现1,3显示,2不显示的情况 解决办法是再初始化adapter之前,把数据对象初始化一下,第一次不要传null给adapter。
yarffoo 2019-10-12
  • 打赏
  • 举报
回复
在ViewPager中不能使用SurfaceView,因为SurfaceView会新建一个独立的Windows。可以用TextureView替代。
冰天糖葫芦 2019-10-10
  • 打赏
  • 举报
回复
网上有很多相关代码的,你可以找找仿抖音的代码,希望对你有用
  • 打赏
  • 举报
回复
请问lz解决了没有,我正好也出现了这个问题,麻烦请教一下
王能 2019-10-08
  • 打赏
  • 举报
回复
引用 2 楼 qq_34179077 的回复:
请问lz解决了没有,我正好也出现了这个问题,麻烦请教一下
这种问题一般是你初始化时没有调用视频的start或者调用的start太早,可以试试把start相关的代码延时个1秒看看是否能播放,如果能播放再用view.post来延时播放
下载方式:https://pan.quark.cn/s/c8277ae41c1b Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案 在Android中我们经常会用到ViewPager+Fragment组合。 然而,有一个很让人头疼的问题就是,我们去加载数据的时候 由于ViewPager的内部机制所限制,所以它会默认至少预加载一个。 这让人很郁闷,所以,我就想到要封装一个Fragment来解决这个问题。 这里还解决一个问题就是在Android酷炫欢迎页播放视频,仿蚂蜂窝自由行和慕课网 这里感谢有一位网友提出了bug,就是在播放视频的时候如果滑动到第二页和第三页,第一页的视频还在播放,这是个让人很头疼的问题,在这里也完美解决。 问题初探 文章开始已经说过ViewPager的预加载机制。 那么,我们可不可以设置ViewPager的预加载为0,不就解决问题了吗? 经过测试发现,根本不是这么回事,为什么呢?我们来看看Viewpager的setOffscreenPageLimit()方法的源码 我们发现,即使你设置为0,那么还是会在里面判断后设为默认值1。 所以这个方法是行不通的。 问题再探 我们发现Fragment中有一个setUserVisibleHint(boolean isVisibleToUser)方法,这个方法就是告诉用户,UI对用户是否可见,那么我们在这里去加载数据会怎么样呢? 日志 这又是为什么呢? 因为ViewPager会加载好多Fragment,为了节省内容等会在Fragment不可见的某个时候调用onDestroyView()将用户界面销毁掉但是Fragment的实例还在,所以可能第一次加载没有问题, 但...

80,481

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧