如何将调用活动的上下文传递给被调用的活动?

时间:2016-11-25 22:16:23

标签: android android-recyclerview android-context

大家好,我实际上有一个活动,我正在使用recyclerview显示所有电影列表,并在每个电影项目上点击一个电影,现在当用户点击任何任何电影项目时,我打开详细信息我在哪里显示详细信息关于用户点击的那部电影,这个detailactivity还有一个按钮来支持这部电影。现在我面临的问题是假设用户没有在recyclerview列表中投票,但是在详细信息中进入内部,然后在他按下后退按钮时他就投票支持我必须在我的recyclerview中显示这部电影。

现在我可以通过两种方式解决我的问题。

  1. 使用onActivityResult  但是这种方法显示出一些延迟,因为当现在在调用者活动中单击后退按钮时,我需要调用我的recyclerview适配器的notifyitemchanged(),这需要一些时间。 <500 pse。

  2. 在我的Application类中存储上下文  到目前为止,这件事对我来说很好,而且没有任何滞后。

  3. 但我读了一篇关于SO的帖子,用户写道不是为了保存活动的上下文,因为活动可能会被破坏。我的整个应用程序都处于纵向模式,所以我认为没有太多机会让我的上下文意外被破坏。

    所以你们中的任何一个人都能请你们开导我的第二种方法是对的。这对我来说真的很有帮助。

    谢谢。

1 个答案:

答案 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。你需要确定这个时间的来源。

  

我的整个应用程序都处于纵向模式,所以我认为没有太多机会让我的上下文意外被破坏。

默认情况下,它会在任何配置更改时被销毁,这不仅仅是方向更改。此外,如果用户在详细活动位于前台时离开您的应用,则当用户返回您的应用时,如果您的流程在此期间终止,则可能会出现问题。

  

所以你们中的任何一个人都能请你们开导我的第二种方法是对的。

通常不赞成(例如,内存泄漏的可能性增加)。