問題タブ [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 - Otto: Fragment サブスクリプションがイベントを受け取らない
フラグメントを取得し、フラグメントonResume
とonPause
メソッドでバスを登録および登録解除しました。次のBusProvider.getInstance().register(this);
とを使用しますBusProvider.getInstance().unregister(this);
。
次のように定義されたサブスクリプションがあります。
フラグメントがアタッチされているアクティビティの同じイベントに対して別のサブスクリプションもあり、そのサブスクリプションは反応してそれを実行します。私の質問は、なぜ私のフラグメントが のイベントを受信しないのLoggedInEvent
ですか?
編集:
アクティビティonResume
とonPause
メソッドでもバスを登録/登録解除しました。
編集2:
バスはでインスタンス化されましたThreadEnforcer.ANY
java - イベント バスを使用してインターフェイスを更新することの欠点は?
Android アプリケーションのさまざまなコンポーネントからインターフェイス (アクティビティ) を更新するために、イベント バス ライブラリOttoの使用を開始しました。たとえば、モデル クラスに変更が加えられた場合は、イベント バスにポストします。変更が終了した場合は、メソッドAsyncTask
内のイベント バスにイベントをポストします。onPostExecute
これまでのところ、ユーザー インターフェイスの更新には 1 つのイベント バスを使用しています。一時停止したアクティビティでさえ、これらのイベントをまだ受け取っていることに気付きました。ドキュメントには、次のように記載されています
一時停止されたアクティビティはユーザー入力を受信せず、コードを実行できません。
私が物議を醸すと思うのは、このコードはもちろん別のスレッドで実行されますが、まだアクティビティにあるということだけです。
私の質問は、この使用法は何か不利益をもたらすのでしょうか? 複数のアクティビティを一時停止する、イベントを実行する、(一時停止した) アクティビティの要素を更新する、またはそれらを無視する。これにより、顕著なオーバーヘッドが発生しますか、それとも無視できますか?
インターフェイスを更新するためにイベントバスを使用したい場合、別のアプローチはありますか?
android - 終了したアクティビティの Otto Event Bus サブスクライバー
このようなフラグメントで新しいアクティビティを開始すると
新しいアクティビティでキャッチしたい同じイベントをサブスクライブしている古いアクティビティのフラグメントが呼び出されます。古いアクティビティを間違って終了するか、フラグメントが終了していませんか? すべてのフラグメントとアクティビティの onDestroy メソッドで登録を解除します。
java - フォーカスされていない ViewPager Fragment の画像を変更する
だから私はこのように実装されたビューページャーを持っています
メイン ビューでは、画面の右上にナビゲーション バーに似たボタンがあります。クリックまたはスワイプすると非表示になり、メイン画面に再びフォーカスしたときに再び表示されるようにします。何時間も試してみましたが、うまくいきませんでした。
setVisibility(View.GONE)/VISIBLE
nullポインターを取得し続けるか、画像が変更されないだけです。
OnPageChangeListener()
ボタンの状態を変更するために otto イベントを実装して使用しようとしましたが、イベントが受信されません。
要するに、主な目標は、ViewPager に表示されていないビューの要素とやり取りできるようにすることです。
android - イベント バスは Android アプリケーションでインテントを完全に置き換えることができますか?
Android アプリケーションで Intent システムを完全に取り除き、イベント バス (Otto、greenrobot) のみを使用することは可能ですか? たとえば、インテントをまったく使用せずに、イベント バスのみでこれを達成することは可能ですか。
イベント バスを使用すると、インテントで行われるように、自動的に正しいアクティビティが再開され、前面に表示されますか?
android - Otto(イベントバス)、イベントフラグメントをフラグメントに送信するが受信しない
MainActivity には NavigationDrawer があり、各ナビゲーション メニューには新しい Activity の代わりに Fragment が表示されます。
設定フラグメントがあり、ナビゲーション メニューの順序を変更すると、すぐに NavigationDrawerFragment に反映されるはずです。
SettingsFragment にイベントを投稿しましたが、NavigationDrawerFragment には表示されませんでした。
バスを拡張する AndroidBus を作成しました
Dagger によって各フラグメントにバス オブジェクトを挿入し、onActivityCreated にフラグメントを登録し、onDestroyView の登録を解除します。
イベントを投稿しても配信されず、DeadEvent ログが表示されます。
MainActivity を onCreate メソッドにも登録します。 MainActivity で同じイベントをサブスクライブすると、イベントを受け取ります。
これを読んでくれてありがとう。誰かがこれについて私に教えてくれることを願っています。
android - イベント バス (Otto または Greenrobot) は onCreate*() コールバックに依存していますか?
Android のアクティビティ/フラグメント/サービスと組み合わせたイベント バスのデザイン パターンに関する特定の質問があります。
これまでにわかったこと: 作成したイベント バスを使用する場合、たとえば、アプリケーション全体に対して単一のイベント バスを使用します (シングルトン デザイン パターン)。これで、単一のアクティビティ/フラグメント/サービスがイベント バスにイベントを投稿できるようになり、イベント バスは、この特定のイベントを購読している他のすべてのアクティビティ/フラグメント/サービスにニュースを広めます。このようにして、他のすべてのアクティビティ/フラグメント/サービスがこの特定のイベントに反応できます。すべてのアクティビティ/フラグメント/サービスがイベント バスを使用できるようにするには、バスに登録する必要があり (できれば onCreate*() メソッドで)、停止/キャンセル/破棄しようとしている場合は登録を解除する必要があります。 .
これは私の質問につながります:私は真新しいアクションバーを実装したいとしましょう(Androidのものやシャーロックなどではなく、ここでは最初から意味します)。私の理解では、イベント バスを使用してアクションバーを実装できます。したがって、アクティビティ レイアウトの上にボタンを配置したメイン アクティビティがあり、各ボタンには独自の onClick メソッドが実装されています。ボタンごとに、関連するボタンがクリックされると表示されるフラグメントがあります。これで、各 onClick メソッド (ボタンごとに 1 つ) 内でイベントをイベント バスに投稿でき、バスはそれをフラグメントに広げます。次に、フラグメントは、追加のイベント情報に応じて、表示されるかどうかを確認します。
ここでの問題は、各フラグメントを最初にイベント バスに登録する必要があることです。これを機能させるには、各フラグメントの onCreate() メソッドを少なくとも 1 回呼び出す必要があります。
これについての洞察をありがとう!
シュテファン