1.问题描述
在activityA跳转到activityB(主要控件为recyclerview)时一开始为空白,手指往上移动一小段距离之后数据才显示出来。一开始模拟器上运行没问题,但是多重复执行这个动作之后也出现了几次空白屏的情况,在真机上大部分都是空白屏。
这里是直接跳转到activityB后的效果图(已证明跳转是没问题的)
bug.gif
2.解决过程
一开始以为是recyclerview版本的问题,因为它的版本是28,而我的真机是26的。但上网百度了很多之后发现recyclerview并不存在这个问题,只是一些子项view的的尺寸问题而已。然后刚好今早有安卓课,我又去问了老师,老师说是recyclerview控件和activity刷新的问题,因为模拟器上和真机的效果不同,然后也是没能解决。接着我就回去自己到处打印日志,因为我觉得有可能是网络请求的数据还没放进ArrayList数据集,recyclerview就已经setAdapter(ArrayList)了。果然,在打印的日志中ArrayList的size为0,这就正好印证了我的想法。
3.解决方案
既然是网络数据不同步的问题,那就可以利用一些异步消息解析机制handler咯。因为我用的网络请求是同步的,需要新开一个线程。那么就可以在放数据进ArrayList的操作之后调用handler的sendMessage方法,然后在handler的handleMessage方法里放进recyclerview的setAdapter(ArrayList)方法就行了。
主要代码如下:
子线程获取数据并放进ArrayList.png
图片.png
图片.png
网友评论