Android 安卓材质设计vs ContentObserver

Android 安卓材质设计vs ContentObserver,android,material-design,contentobserver,shared-element-transition,Android,Material Design,Contentobserver,Shared Element Transition,我会尽量解释我的问题 在我搜索注册/取消注册我的ContentObserver的位置时,我看到多个答案说它应该位于onResume/onPause或onStart/onStop,而不是onCreate/onDestroy。 假设我在onStart/onStop中注册了register/unregister,为了确保我的视图仍然用新数据更新,我在注册ContentObserver之前获取数据,然后在onStart方法中刷新视图 一切正常,工作正常,直到。。。材料设计转换的共享删除 因为想象 活动A

我会尽量解释我的问题

在我搜索注册/取消注册我的ContentObserver的位置时,我看到多个答案说它应该位于onResume/onPause或onStart/onStop,而不是onCreate/onDestroy。 假设我在onStart/onStop中注册了register/unregister,为了确保我的视图仍然用新数据更新,我在注册ContentObserver之前获取数据,然后在onStart方法中刷新视图

一切正常,工作正常,直到。。。材料设计转换的共享删除

因为想象 活动A向Data-A注册,并在onStart中刷新数据,以便查看。 当用户触摸一个项目时,它会运行一个SharedElement动画,显示该项目的详细信息:活动B和数据-a[n]

问题是,当我从活动B返回到活动A时,由于数据的刷新,列表中的原始项不再存在,并且我的动画没有期望的行为


您对此有何想法?

如果原始数据被替换,则不应使用共享元素转换本身。相反,您可以拍摄快照并附加到目标活动的覆盖以实现所需的动画

请看下面的图片

基本上,从共享元素开始,您可以拍摄快照,将其添加到窗口覆盖中,设置动画,然后在需要时隐藏它。因此,当你回来时,如果你没有数据,只需再次使用快照模拟类似的内容,或者干脆跳过动画


看看,它展示了同样的东西。

谢谢,我想看看,我正在考虑使用ShareElementCallback。更具体地说,我的数据不会一直更改,我只是在onStart上刷新视图,以确保不会错过更改。这只是一个想法,但是动画完成后刷新视图怎么样?这完全取决于您的用例。快照的概念是在两个活动之间没有公共元素(至少从外观上看)的情况下设置动画。