关于 list 中插入广告 item,大夥有没有好的实现思路呢?

2018-07-19 22:31:15 +08:00
 lookforsex
现在负责一个新闻 feed,是用 recycler view 实现的,需要接入 Facebook 原生广告。

一开始思路是每次拿到一部分新闻 list 时,每隔 5 个插入一个空 bean,同时标记为广告 view type, 最后才传给 adapter。

adapter 方面,就是老样子的在 createviewholder 和 bindviewholder 根据不同的 view type 显示不同的 layout。

坑在于 Facebook 广告有时加载不出来,然后 feed 上就显示一段空白的广告位,十分尴尬。试过在加载失败时将 AD view holder 设为 view.gone. 但是失败了。

大佬们有好点的实现方案吗?
9383 次点击
所在节点    Android
8 条回复
iConnect
2018-07-19 22:38:46 +08:00
异步延迟 3 秒加载总够了
lookforsex
2018-07-19 22:46:38 +08:00
@iConnect 我好像没说明白,就是广告在加载的时候,还是会占位,白色区域。加载成功还好,加载失败就永远是空白的,就像 feed 中间断了,视觉一眼差
haaro
2018-07-19 22:48:28 +08:00
推荐 Airbnb 的 Epoxy
StephenDev
2018-07-19 22:52:24 +08:00
那你为什么不直接先加载出 feed,然后等广告加载出来之后,在插入到中间呢,这样话即使广告失败了,也不影响 feed 啊。recyclerview 完全可以动态增删 item 的啊。
lookforsex
2018-07-19 23:02:08 +08:00
@StephenDev 这个有想过,但是效果也不太理想,主要位置的问题,理想效果是自然滑动下去就已经加载好与 feed 融为一体的感觉,而且有些情况下,滑到某位置,在两条新闻中闪现出来一条广告。

参考了 Instagram 感觉它的广告很自然,每五个一条广告,感觉是有预加载,不知道是否是监听了滑动事件
iConnect
2018-07-19 23:23:05 +08:00
@lookforsex 如果你的新闻 list 时可以缓存的话,那就把广告 item 也提前缓存;如果新闻 list 是实时查询出来的,可以考虑异步缓存一下广告 item,先不要占位;如果空白框是广告商那边的问题,那就直接请对方考虑网速慢的情况,不要先渲染 dom 高度,这个你没法控制的
StephenDev
2018-07-20 09:37:21 +08:00
@lookforsex 那你试下在 recyclerview 的 create 或者 bind 的时候加一个判断。
比如 create 的时候,if(pos>0&&adList!=null&&pos % 5 ==0){return adViewHolder}
这样的话就可以在有广告的情况下,每隔 5 个 item 出现一个广告,这样应该也不用动态的去自己增删了。
GoodRainChen
2018-07-24 20:35:38 +08:00
先加载,再插入。notifyItemAdd

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/472489

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX