問題タブ [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: Fragment サブスクリプションがイベントを受け取らない

フラグメントを取得し、フラグメントonResumeonPauseメソッドでバスを登録および登録解除しました。次のBusProvider.getInstance().register(this);とを使用しますBusProvider.getInstance().unregister(this);

次のように定義されたサブスクリプションがあります。

フラグメントがアタッチされているアクティビティの同じイベントに対して別のサブスクリプションもあり、そのサブスクリプションは反応してそれを実行します。私の質問は、なぜ私のフラグメントが のイベントを受信しないのLoggedInEventですか?

編集: アクティビティonResumeonPauseメソッドでもバスを登録/登録解除しました。

編集2: バスはでインスタンス化されましたThreadEnforcer.ANY

0 投票する
1 に答える
1882 参照

java - イベント バスを使用してインターフェイスを更新することの欠点は?

Android アプリケーションのさまざまなコンポーネントからインターフェイス (アクティビティ) を更新するために、イベント バス ライブラリOttoの使用を開始しました。たとえば、モデル クラスに変更が加えられた場合は、イベント バスにポストします。変更が終了した場合は、メソッドAsyncTask内のイベント バスにイベントをポストします。onPostExecute

これまでのところ、ユーザー インターフェイスの更新には 1 つのイベント バスを使用しています。一時停止したアクティビティでさえ、これらのイベントをまだ受け取っていることに気付きました。ドキュメントには、次のように記載されています

一時停止されたアクティビティはユーザー入力を受信せず、コードを実行できません。

私が物議を醸すと思うのは、このコードはもちろん別のスレッドで実行されますが、まだアクティビティにあるということだけです。

私の質問は、この使用法は何か不利益をもたらすのでしょうか? 複数のアクティビティを一時停止する、イベントを実行する、(一時停止した) アクティビティの要素を更新する、またはそれらを無視する。これにより、顕著なオーバーヘッドが発生しますか、それとも無視できますか?

インターフェイスを更新するためにイベントバスを使用したい場合、別のアプローチはありますか?

0 投票する
1 に答える
1168 参照

android - 終了したアクティビティの Otto Event Bus サブスクライバー

このようなフラグメントで新しいアクティビティを開始すると

新しいアクティビティでキャッチしたい同じイベントをサブスクライブしている古いアクティビティのフラグメントが呼び出されます。古いアクティビティを間違って終了するか、フラグメントが終了していませんか? すべてのフラグメントとアクティビティの onDestroy メソッドで登録を解除します。

0 投票する
2 に答える
119 参照

java - フォーカスされていない ViewPager Fragment の画像を変更する

だから私はこのように実装されたビューページャーを持っています ここに画像の説明を入力

メイン ビューでは、画面の右上にナビゲーション バーに似たボタンがあります。クリックまたはスワイプすると非表示になり、メイン画面に再びフォーカスしたときに再び表示されるようにします。何時間も試してみましたが、うまくいきませんでした。

setVisibility(View.GONE)/VISIBLEnullポインターを取得し続けるか、画像が変更されないだけです。

OnPageChangeListener()ボタンの状態を変更するために otto イベントを実装して使用しようとしましたが、イベントが受信されません。

要するに、主な目標は、ViewPager に表示されていないビューの要素とやり取りできるようにすることです。

0 投票する
1 に答える
1710 参照

android - イベント バスは Android アプリケーションでインテントを完全に置き換えることができますか?

Android アプリケーションで Intent システムを完全に取り除き、イベント バス (Otto、greenrobot) のみを使用することは可能ですか? たとえば、インテントをまったく使用せずに、イベント バスのみでこれを達成することは可能ですか。

イベント バスを使用すると、インテントで行われるように、自動的に正しいアクティビティが再開され、前面に表示されますか?

0 投票する
3 に答える
7672 参照

android - Otto(イベントバス)、イベントフラグメントをフラグメントに送信するが受信しない

MainActivity には NavigationDrawer があり、各ナビゲーション メニューには新しい Activity の代わりに Fragment が表示されます。

設定フラグメントがあり、ナビゲーション メニューの順序を変更すると、すぐに NavigationDrawerFragment に反映されるはずです。

SettingsFragment にイベントを投稿しましたが、NavigationDrawerFragment には表示されませんでした。

バスを拡張する AndroidBus を作成しました

Dagger によって各フラグメントにバス オブジェクトを挿入し、onActivityCreated にフラグメントを登録し、onDestroyView の登録を解除します。

イベントを投稿しても配信されず、DeadEvent ログが表示されます。

MainActivity を onCreate メソッドにも登録します。 MainActivity で同じイベントをサブスクライブすると、イベントを受け取ります。

これを読んでくれてありがとう。誰かがこれについて私に教えてくれることを願っています。

0 投票する
1 に答える
1061 参照

android - イベント バス (Otto または Greenrobot) は onCreate*() コールバックに依存していますか?

Android のアクティビティ/フラグメント/サービスと組み合わせたイベント バスのデザイン パターンに関する特定の質問があります。

これまでにわかったこと: 作成したイベント バスを使用する場合、たとえば、アプリケーション全体に対して単一のイベント バスを使用します (シングルトン デザイン パターン)。これで、単一のアクティビティ/フラグメント/サービスがイベント バスにイベントを投稿できるようになり、イベント バスは、この特定のイベントを購読している他のすべてのアクティビティ/フラグメント/サービスにニュースを広めます。このようにして、他のすべてのアクティビティ/フラグメント/サービスがこの特定のイベントに反応できます。すべてのアクティビティ/フラグメント/サービスがイベント バスを使用できるようにするには、バスに登録する必要があり (できれば onCreate*() メソッドで)、停止/キャンセル/破棄しようとしている場合は登録を解除する必要があります。 .

これは私の質問につながります:私は真新しいアクションバーを実装したいとしましょう(Androidのものやシャーロックなどではなく、ここでは最初から意味します)。私の理解では、イベント バスを使用してアクションバーを実装できます。したがって、アクティビティ レイアウトの上にボタンを配置したメイン アクティビティがあり、各ボタンには独自の onClick メソッドが実装されています。ボタンごとに、関連するボタンがクリックされると表示されるフラグメントがあります。これで、各 onClick メソッド (ボタンごとに 1 つ) 内でイベントをイベント バスに投稿でき、バスはそれをフラグメントに広げます。次に、フラグメントは、追加のイベント情報に応じて、表示されるかどうかを確認します。

ここでの問題は、各フラグメントを最初にイベント バスに登録する必要があることです。これを機能させるには、各フラグメントの onCreate() メソッドを少なくとも 1 回呼び出す必要があります。

これについての洞察をありがとう!

シュテファン