LottieAnimationView场景恢复-导致的底部按钮显示相同
发布网友
发布时间:2023-07-13 13:03
我来回答
共1个回答
热心网友
时间:2024-12-02 14:55
记录一个遇到的问题
我在这里点了快速运行,导致本身四个不同的图片变成和最后一个图片一样的了.,其实旋转屏也可以复现!
然鹅,如果出现这个问题的时候是旋转屏,我会直接晓得是场景恢复导致的,但是我发现的时候是快速运行和崩溃的时候复现的,我没有联想到,所以我找了好久.
那么问题已经找到了就是场景恢复导致的,那就去定位问题吧.
lottie 源码版本
既然大致知道是场景恢复引发的这个事件,那么就直接查LottieAnimationView的这两个方法
看了一下LottieAnimationView果然重写了这两个方法
onSaveInstanceState,果然保存了动画的属性,o(╥﹏╥)o
onRestoreInstanceState 恢复的时候把对应的动画属性恢复过来了
你会说没毛病呀,一个对象一个资源,不会导致4个对象使用一个资源呀!这里先把原因说出来.
这四个LottieAnimationView有相同的id.
给你看个布局 R.layout.view_maintab,
自定义了一个FrameLayout用来装布局,然后写一些共同的属性,来实现切换的tab!
问题原因:
这里因为场景恢复的数据通过onSaveInstanceState()先存到一个SparseArray<Parcelable> container集合里,通过dispatchRestoreInstanceState()通过id来取出对应的数据.
在执行onSaveInstanceState()的时候最后一个tab因为id和前面的三个一致,直接覆盖了前面的数据.这就是问题的原因,那怎么办呢?
解决方式:
不写id了就好了呗!那你怎么获取对象呢?可以使用getChild()....等方式拿到对象.