问题标签 [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.

0 投票
1 回答
2067 浏览

android - Otto:片段订阅未收到事件

我有一个片段,并在片段onResumeonPause方法中注册和注销了总线。使用以下BusProvider.getInstance().register(this);BusProvider.getInstance().unregister(this);.

我有一个这样定义的订阅:

我还在片段附加到的活动中为同一事件订阅了另一个订阅,并且该订阅会做出反应并做到这一点。所以我的问题是为什么我的片段没有收到事件LoggedInEvent

编辑: 我还在我的活动onResumeonPause方法中注册/注销了总线。

编辑2: 总线被实例化ThreadEnforcer.ANY

0 投票
1 回答
1882 浏览

java - 使用事件总线更新界面的缺点?

我已经开始使用事件总线库Otto来更新我的 Android 应用程序中不同组件的界面(活动)。例如,当对模型类进行更改时,我将发布到事件总线,或者如果AsyncTask已经完成,我将事件发布到方法中的事件总线onPostExecute

到目前为止,我正在使用一个事件总线进行用户界面更新。我注意到即使是暂停的活动也会收到这些事件。在文档中它指出

暂停的活动不接收用户输入并且不能执行任何代码。

我觉得有争议,我只能解释这一点,这段代码当然是在不同的线程上执行的,但仍在活动中。

我的问题是,这种用法会导致任何缺点吗?暂停多个活动、执行事件、更新(暂停)活动的元素或忽略它们。这会导致明显的开销还是我可以忽略它?

当一个人想要使用事件总线来更新界面时,是否有不同的方法?

0 投票
1 回答
1348 浏览

android - 使用带有 Otto 事件总线的通用事件

我使用 Otto 事件总线来订阅 Volley Requests。我想使用这个泛型类,但错误的片段(订阅者)试图处理事件。是否可以使用泛型类或随机调用 VolleyResultEvent 的每个订阅者,独立于泛型类型?

0 投票
1 回答
1168 浏览

android - Otto Event Bus 已完成活动的订阅者

当我在这样的片段中开始新活动时

订阅我想在新活动中捕获的同一事件的旧活动片段被调用。我是错误地结束了旧的活动还是片段没有结束?我在每个片段和活动的 onDestroy 方法中取消注册。

0 投票
2 回答
119 浏览

java - 在未聚焦的 ViewPager 片段中更改图像

所以我有一个像这样实现的视图寻呼机 在此处输入图像描述

在主视图中,我在屏幕右上角有一个类似于导航栏的按钮。当我单击或滑动它时,我希望它消失,当它重新聚焦在主屏幕上时,我希望它再次出现。我已经尝试了几个小时,但没有运气。

我知道我需要使用setVisibility(View.GONE)/VISIBLE我只是不断获得空指针,否则图像不会改变。

我也实现OnPageChangeListener()并尝试使用 otto 事件来更改按钮状态,但从未收到该事件。

简而言之,主要目标是能够与 ViewPager 中未显示的任何视图上的元素进行交互

0 投票
1 回答
1710 浏览

android - 事件总线可以在 Android 应用程序中完全取代 Intents 吗?

在 Android 应用程序中是否有可能完全摆脱 Intent 系统并仅使用事件总线(Otto、greenrobot)?例如,是否有可能仅使用事件总线来实现这一点,而根本没有意图:

如果我使用事件总线,它会自动恢复正确的活动并将其带到前面,就像使用 Intents 所做的那样?

0 投票
2 回答
1713 浏览

android - Otto 总线事件,单次订阅应该只被调用

我已经使用了 otto 事件总线作为解释这里。它工作得很好。

http://square.github.io/otto/

https://code.google.com/p/guava-libraries/wiki/EventBusExplained

今天我意识到,如果我创建事件并在 2 个地方订阅它,两者都会被调用。

为了更清楚这一点:

我有使用事件总线进行内部通信的 jar。当我在我的应用程序中使用这个 jar 时,我可以在事件总线上注册并捕获事件。

如何避免这种情况?

0 投票
1 回答
622 浏览

java - 使用 Otto,方法只有在我直接在别处调用时才会订阅

我有一个问题,即我的订阅方法之一不会在正确事件类型的帖子上被调用,除非该订阅方法在其他地方使用(调用)。

以下是有关代码的一些相关信息:

  • 我的一个类的方法用@Subscribe 注释。
  • 通过使用调试器单步执行代码,我发现在我的特定情况下,该类没有使用@Subscribe 注释的方法。
  • 除非我在某个时间点直接调用该方法(无论何时,或者即使它实际上在运行时被调用),否则我的帖子不起作用。
  • IDE(Android Studio)通知我“方法从未使用过”

我当然可以在我确信永远不会触发的代码块中调用该方法,但这显然是一种糟糕的做法,并且违背了这种发布/订阅范式的目的。

或者我可以将方法设为静态,但我不想这样做,因为我在其中使用了成员变量。

即使 Otto 的示例使用了类似的模式,也可以解决为什么会发生这种情况

0 投票
3 回答
7672 浏览

android - Otto(事件总线),将事件片段发送到片段但不接收

MainActivity 有一个 NavigationDrawer,每个导航菜单都会带来 Fragment 而不是新的 Activity。

有设置片段,如果我更改导航菜单的顺序,它应该立即反映到 NavigationDrawerFragment。

我在 SettingsFragment 中发布了事件,但它没有出现在 NavigationDrawerFragment 上。

我做了一个 AndroidBus extends Bus

我通过 Dagger 将总线对象注入每个片段,并在 onActivityCreated 中注册片段,并在 DestroyView 中取消注册。

如果我发布事件,它不会被传递,我会看到 DeadEvent 日志。

我也在 onCreate 方法中注册 MainActivity,如果我在 MainActivity 订阅相同的事件,它会接收到该事件。

感谢您阅读本文,我希望有人能启发我。

0 投票
1 回答
1061 浏览

android - 事件总线(Otto 或 Greenrobot)是否依赖于 onCreate*() 回调?

我有一个关于事件总线设计模式与 androids 活动/片段/服务相结合的具体问题。

到目前为止我所理解的:当使用事件总线时,我可以说,为我的整个应用程序创建一个事件总线(单例设计模式)。现在我可以让单个活动/片段/服务在事件总线上发布一个事件,事件总线将消息传播到订阅此特定事件的所有其他活动/片段/服务。这样,所有其他活动/片段/服务都可以对此特定事件做出反应。为了让所有活动/片段/服务能够使用事件总线,他们必须在总线上注册(最好在他们的 onCreate*() 方法中),如果他们即将停止/取消/销毁,他们应该取消注册.

这让我想到了我的问题:假设我想实现一个全新的操作栏(不是 android 或 sherlock 或任何其他,我的意思是从头开始)。据我了解,我可以实现一个带有事件总线的操作栏。因此,我的主要活动将在活动布局顶部带有按钮,并且每个按钮都实现了自己的 onClick 方法。对于每个按钮,一旦单击关联的按钮,我就会有一个可见的片段。现在在每个 onClick 方法(每个按钮一个)中,我可以将一个事件发布到事件总线,然后总线将其传播到片段。然后片段根据附加的事件信息检查它们是否应该可见。

现在这里的问题是,每个片段都需要先注册到事件总线,所以为了让这个工作每个片段的 onCreate() 方法必须至少调用一次,对吗?

感谢您对此的任何见解!

史蒂芬