大家好,我实际上有一个活动,我正在使用recyclerview显示所有电影列表,并在每个电影项目上点击一个电影,现在当用户点击任何任何电影项目时,我打开详细信息我在哪里显示详细信息关于用户点击的那部电影,这个detailactivity还有一个按钮来支持这部电影。现在我面临的问题是假设用户没有在recyclerview列表中投票,但是在详细信息中进入内部,然后在他按下后退按钮时他就投票支持我必须在我的recyclerview中显示这部电影。
现在我可以通过两种方式解决我的问题。
使用onActivityResult 但是这种方法显示出一些延迟,因为当现在在调用者活动中单击后退按钮时,我需要调用我的recyclerview适配器的notifyitemchanged(),这需要一些时间。 <500 pse。
在我的Application类中存储上下文 到目前为止,这件事对我来说很好,而且没有任何滞后。
但我读了一篇关于SO的帖子,用户写道不是为了保存活动的上下文,因为活动可能会被破坏。我的整个应用程序都处于纵向模式,所以我认为没有太多机会让我的上下文意外被破坏。
所以你们中的任何一个人都能请你们开导我的第二种方法是对的。这对我来说真的很有帮助。
谢谢。
答案 0 :(得分:3)
如何将调用活动的上下文传递给被调用的活动?
你不能。
现在我可以通过两种方式解决我的问题
还有更多方法,例如:
当用户赞成电影时,使用事件总线(例如,greenrobot的EventBus,LocalBroadcastManager
,基于RxJava / RxAndroid的总线),让其他感兴趣的人知道upvote。例如,保存upvote状态的后台线程可能会在某个状态持久保存后引发事件。
让RecyclerView
实现活动“嘿,我为Movie X启动了一个详细活动,然后我回到前台,让我们更新Movie X的上选状态基于我们的数据模型缓存,因为它可能已更改“,并在onResume()
中执行此操作。
既然你写了“实际上关键是数据,因为我可以将它存储在共享首选项中,如果我想要”,虽然SharedPreferences
将是一个奇怪的数据存储选择,你可以拥有RecyclerView
上有registerOnSharedPreferenceChangeListener()
来电SharedPreferences
的活动,以了解投票状态何时发生变化。
将您的数据存储空间包裹在ContentProvider
中,并使用ContentObserver
在活动中使用RecyclerView
,以查看数据何时发生变化。
使用onActivityResult但是这种方法显示出一些延迟,因为现在在调用者活动中点击后退按钮我需要调用我的recyclerview适配器的notifyitemchanged(),这需要一些时间。近500毫秒。
根据定义,任何解决方案都将涉及更新RecyclerView
。你需要确定这个时间的来源。
我的整个应用程序都处于纵向模式,所以我认为没有太多机会让我的上下文意外被破坏。
默认情况下,它会在任何配置更改时被销毁,这不仅仅是方向更改。此外,如果用户在详细活动位于前台时离开您的应用,则当用户返回您的应用时,如果您的流程在此期间终止,则可能会出现问题。
所以你们中的任何一个人都能请你们开导我的第二种方法是对的。
通常不赞成(例如,内存泄漏的可能性增加)。