Kit*_*fer 7 android-fragments android-activity otto
我昨天开始使用Square的OTTO,到目前为止,我有一个良好的开端.
当您的片段已经托管在FragmentActivity中时,Otto可以很好地开箱即用,您只需要在FragmentActivity托管的Fragment之间进行通信.
在托管时,您的#onResume()Methode被调用,Fragment可以在Eventbus上注册自己:
@Override
public void onResume()
{
super.onResume();
BusProvider.getInstance().register(this);
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
片段嵌入在一个额外的 Activity中,它应该通过Eventbus接收事件,如下所示:
public AnotherFragmentHostedInSomeActivity extends Fragment
{
.....
@Subscribe
public void onSomethingHappend(final Event event)
{
final SomeObject deliveredObject = event.getSomeObject();
Run Code Online (Sandbox Code Playgroud)
但是当你想在那里调用托管片段的另一个活动时,看起来事情仍然很复杂:
public class SomeFragmentSendingDataToAnotherFragment extends Fragment
{
...
private void sendData()
{
final Intent intent = new Intent(applicationContext, SomeActivity.class);
applicationContext.startActivity(intent);
BusProvider.getInstance().post(new Event(someObject));
Run Code Online (Sandbox Code Playgroud)
正如您可能已经看到的,这段代码很狡猾.启动一个Activity然后将Data发送到该Activity托管的Fragment,因为生命周期不能正常工作.因此,活动也会被创建,而Fragements也会被创建.有时会调用onResume Methode,因此Fragement可以使用@Subscribe注册.但这一切都发生在事件已经通过EventBus发布后.因此,拦截的片段永远不会被EventBus调用.
任何人都知道如何以聪明的方式做到这一点?
那里还有一些额外的信息:我昨天和奥托一起玩得很好.当我需要将数据发送到另一个活动时,问题只出现在我的项目中,在我的情况下,当APP在智能手机上运行时,而不是平板电脑上运行.在我通过Intent和Parcelable发送所有数据之前.Otto会减少编写Parcleable Objects的需求,所以我想这样做.
谢谢你的回答
Eri*_*rke 16
到第二个Activity开始时,原来的Activity就不见了.正如其他人所指出的,如果你想将数据从Activity传递给Activity,使用Intents可能是最好的途径.
如果你真的想要一个事件总线,你需要一个即使在第一个活动消失后仍然存活的对象.在Android中,这与应用程序上下文相关联,或者使用Dagger或Guice,@ Singleton.
这个单例是你使用Otto的@Produce注释的地方.当第二个Activity订阅总线时,它将从该@Produce方法接收任何数据.
| 归档时间: |
|
| 查看次数: |
7164 次 |
| 最近记录: |