问题标签 [otto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android-fragments - 其他活动中的 OTTO 和 Fragments
我昨天开始使用 OTTO by Square,到目前为止我有一个好的开始。
当您的 Fragment 已经托管在 FragmentActivity 中并且您只需要在该 FragmentActivity 托管的 Fragment 之间进行通信时,Otto 开箱即用的效果很好。
当已经托管时,您的 #onResume() Methode 会被调用,并且 Fragment 可以在 Eventbus 上注册自己:
我的问题:
嵌入在额外Activity 中的 Fragment 应该通过 Eventbus 接收事件,如下所示:
但是,当您想在那里调用另一个托管类似以下代码的片段的活动时,看起来事情仍然很复杂:
正如您可能已经看到的那样,这段代码很狡猾。由于生命周期,启动 Activity 然后将数据发送到该 Activity 托管的 Fragment 无法正常工作。因此,活动被创建,片段也被创建。有时会调用 onResume Methode,以便 Fragment 可以使用 @Subscribe 注册自己。但这一切都发生在事件已经通过 EventBus 发布之后。因此,感兴趣的片段永远不会被 EventBus 调用。
任何人都知道如何以聪明的方式做到这一点?
那里有一些额外的信息:昨天我和 OTTO 玩得很开心。只有当我需要将数据发送到另一个活动时,问题才会出现在我的项目中,在我的情况下,这种情况总是发生在应用程序在智能手机上运行时,而不是平板电脑上。在我通过 Intent 和 Parcelable 发送所有数据之前。Otto 会减少编写 Parcleable Objects 的需要,所以我想这样做。
感谢您的回答
android - 使用 Otto 将数据从 Activity 传递到 Fragment
在我的应用程序中,我将片段动态添加到主活动视图中的容器中。我想知道在添加 Fragment 时使用 Otto 时传递数据的最佳方式是什么。目前这就是我的做法,请在示例中我没有发布我的 CustomObject
在我的主要活动中
在我的片段里面
android - 注销片段时 OTTO 中的 IllegalArgumentException
我使用 Otto 总线将事件从活动传递到片段。问题是,片段由 管理ViewPager
并且可以重新创建片段而无需执行其onPause()
和/或onResume()
。不愉快的副作用是,在bus.unregister(fragment)
调用中onPause()
调用时会定期失败并出现 IllegalArgumentException。我还怀疑对我的@Subscribe
注释方法的调用可能会被错过,因为bus.register()
调用在onResume()
方法中也不能被调用。而且,不幸的是,没有bus.isRegistered(fragment)
办法进行安全检查。
有没有更好的方法来注册/注销 ViewPager 托管片段?
我知道这篇文章讨论了类似的设置,但它不包括在 ViewPager 中运行的片段
android - 如何使用 Otto 事件总线将事件从服务发送到活动?
简单BusProvider.getInstance().post()
不带异常main thread
。如何使用 Otto 事件总线将事件从服务发送到活动?
android - 使用带有保留片段的 Otto 时出现 IllegalArgumentException
我正在使用Otto 1.3.3,当我恢复我的应用程序时,有时我会得到IllegalArgumentException
以下堆栈跟踪:
SessionProviderFragment
保留了它的实例,请在扩展类下面找到:
我尝试同时使用bus.register(this)
inonAttach()
或onCreate()
,但这并没有改变问题。
android - 同步 ListFragment 和 SupportMapFragment 选择
我对基本相同的数据有 2 个视图:
- android.support.v4.app 中的项目列表。列表片段
- com.google.android.gms.maps 中地图上的标记。支持MapFragment
以上两种都是使用加载器模式来获取相同的数据(扩展LoaderCallbacks,查询ContentProvider等)
两者都托管在ViewPager内的单个活动中。
为这两个片段同步当前选定的列表项/标记的最佳策略是什么?(想想“我的地点”编辑 UI,或谷歌地图的“路线”,左侧窗格和中间的地图)。
到目前为止我正在考虑的场景:
- 使每个片段通过回调接口手动通知其对应的选择更改(这可能涉及协调片段间通信的底层活动,正如 Android 文档所建议的那样)。
- 不知何故,让两个片段使用相同的光标,甚至是 ListAdapter(无论它对地图意味着什么,因为现在它直接从光标填充)。
- (还有什么?)
也许有人已经处理过这个确切的案例?(我肯定会找到一些解决方案,只是想避免“重新发明轮子”。抱歉,这个问题太概念化了。)
编辑(解决方案)
我认为 Maciej 已经回答了我的确切问题(“最佳策略”等..),所以答案是1和2 ;-)
进入更多细节,我的实现是这样的:
起初,我害怕在 Java 中处理发布者/订阅者模式的巨大开销(涉及接口,为回调寻找合适的位置,以及不存在的地方)。幸运的是,Otto总线的实现引起了我的注意,这使得片段之间的通信变得微不足道。不仅可以通知所有订阅者有关选择更改的信息,而且整个加载器模式也非常适合:
从 Otto 的示例代码中借用 BusProvider 类。
创建一些消息合约来携带通知数据:
/li>使用 @Subscribe 在片段中注释“接收者”方法(下面的示例是针对加载程序的情况,对于选择更改,它不再复杂):
/li>让片段“监听”通知:
/li>当片段不“活着”时,让片段停止收听(特别是片段 API,很难学会):
/li>最后,在需要的地方触发通知(下面的示例演示了如何在加载光标时从LocationList活动中通知):
/li>
奖励:通知流可视化
android - Android 上的 Fragment 之间的通信
我正在尝试构建一个具有两个选项卡的 Android 应用程序,一个用于 textField/button 和 TreeMenu(其中每个元素都有一个与之关联的复选框),另一个用于列表。我也在使用 ActionBarSherlock。我已经在一个主要活动中成功编写了程序,但是很难弄清楚如何划分这个原始活动以对应于我需要为每个选项卡创建的两个新片段实例。此外,每次在第一个选项卡中添加项目时(无论是被选中还是添加到文本字段),第二个窗口中的列表都应该识别更新。
要构建操作栏,我可以这样做......
要创建选项卡..
要创建每个选项卡下的片段及其侦听器...
要将它们添加到操作栏...
所有这些都出现在我的 MainActivity 中。例如,我希望两个片段都可以访问一个 ArrayList 变量,因此,就像我说的那样,我可以更新列表。我很想听听您能提供的任何帮助。我很想看看 Otto API 如何用于这样的事情,但我并不挑剔!
android - 使用 Intent 或事件总线在同一个应用程序中进行通信
我了解如何使用 Intent 与系统/其他应用程序进行通信。我了解如何在同一个 App 中使用 Intent。我也了解如何使用 Otto 在同一个 App 内进行通信。
使用 Otto 与 Intents 在我的活动/服务之间进行通信的优缺点是什么?
android - 订阅/接收 IntentService 发布的 Otto 事件的问题
我似乎在这里遇到了两个问题之一。要么像这样的错误:
或者,如果我设法“解决”了这个问题,我根本就不会在我的订阅者中收到该事件。
目前,我有一个类,从几个来源拼凑而成,对 Bus 进行子分类:
在这样的活动中使用:
并像这样从 IntentService 发布:
并且没有收到消息。另一个配置让我收到线程错误,所以我现在就这样做。
那么,我错过了什么,或者做错了什么?
编辑:感谢下面的 Andy 指出我的代码没有像我想象的那样运行。上面的代码现在反映了基于该反馈的修改。