繁体   English   中英

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

[英]How to pass context of calling activity to the called activity?

大家好,我实际上有一个活动,我在使用recyclerview来显示所有电影列表,并带有一个按钮以对每个电影项目上的电影进行投票,现在,当用户单击任何一个电影项目时,我都会打开detailsactivity,其中我正在显示有关该电影的详细信息用户单击了哪个按钮,此DetailsActivity还具有一个按钮可以对此电影进行投票。 现在我面临的问题是,假设用户没有在recyclerview列表中对电影进行投票,而是进入了detailsactivity,然后当他按下后退按钮时他就对电影进行了投票,我必须在recyclerview中显示该电影被投票。

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

  1. 使用onActivityResult但此方法显示一些延迟,因为现在在调用方活动中单击“后退”按钮时,我需要调用我的recyclerview适配器的notifyitemchanged(),这需要一些时间。 近500毫秒

  2. 到目前为止,将上下文存储在“我的应用程序”类中对我来说还不错,并且没有任何滞后。

但是我读了一篇关于SO的帖子,其中用户写了一个不保存活动上下文的信息,因为活动可能会被破坏。 我的整个应用程序都处于“人像”模式,因此我认为没有太多机会意外破坏我的上下文。

因此,请任何一个能启发我的人是我的第二种方法正确与否。 这对我真的很有帮助。

谢谢。

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

你不能

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

除此之外,还有更多方法,例如:

  • 用户对电影进行投票时,请使用事件总线(例如,greenrobot的EventBus, LocalBroadcastManager ,基于RxJava / RxAndroid的总线),以使其他感兴趣的人知道该投票。 例如,一旦状态保存在某个地方,则保存升级状态的后台线程可能会引发一个事件。

  • RecyclerView的活动实现为“嘿,我为Movie X启动了详细活动,现在又回到了前台,所以让我们根据数据模型缓存更新Movie X的表决状态,因为它可能已更改”,并在onResume()完成该工作。

  • 由于您撰写了“实际上,重点并不在于数据,因为我可以根据需要将其存储在共享首选项中”,尽管SharedPreferences是数据存储的一种奇怪选择,但您可以通过RecyclerView调用该活动,并在其上调用registerOnSharedPreferenceChangeListener() SharedPreferences ,以了解投票状态何时更改。

  • 将您的数据存储包装在ContentProvider ,并在活动ContentObserverRecyclerView一起使用,以查看数据何时更改。

使用onActivityResult但此方法显示一些延迟,因为现在在调用方活动中单击“后退”按钮时,我需要调用我的recyclerview适配器的notifyitemchanged(),这需要一些时间。 近500毫秒

根据定义,任何解决方案都涉及更新RecyclerView 您将需要确定这个时间是从哪里来的。

我的整个应用程序都处于“人像”模式,因此我认为没有太多机会意外破坏我的上下文。

默认情况下,它将在任何配置更改时被销毁,这不仅仅是方向更改。 同样,如果用户在详细信息活动处于前台时离开了您的应用程序,那么如果您的过程同时终止,则当用户返回到您的应用程序时,您可能会遇到问题。

因此,请任何一个能启发我的人是我的第二种方法正确与否。

通常对此不满意(例如,内存泄漏的可能性增加)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM