問題タブ [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 とフラグメント
昨日からOTTO by Squareを使い始めましたが、今のところいいスタートが切れています。
Otto は、FragmentActivity でホストされている Fragment が既にあり、その FragmentActivity によってホストされている Fragment 間で通信する必要がある場合に、すぐに使用できます。
すでにホストされている場合は、 #onResume() メソッドが呼び出され、フラグメントがイベントバスに登録できます。
私の問題:
イベントバス経由でイベントを受信する追加のアクティビティに埋め込まれたフラグメントは、次のようになります。
しかし、次のコードのような Fragment をホストする別のアクティビティを呼び出したい場合は、まだ複雑なようです。
すでにお気づきかもしれませんが、このコードは危険です。ライフサイクルが原因で、アクティビティを開始して、そのアクティビティがホストするフラグメントにデータを送信することはできません。したがって、アクティビティが作成され、フラグメントも作成されます。ある時点で onResume メソッドが呼び出され、フラグメントが @Subscribe を使用して自分自身を登録できるようになります。しかし、これはすべて、イベントが EventBus を介してすでにポストされた後に発生します。そのため、目的のフラグメントが EventBus によって呼び出されることはありません。
スマートな方法でこれを行う方法を知っている人はいますか?
いくつかの追加情報があります: 昨日、OTTO でいい遊びがありました。問題は、別のアクティビティにデータを送信する必要がある場合にのみ、プロジェクトで発生します。これは、私の場合、APP がタブレットではなくスマートフォンで実行されているときに常に発生します。Intent と Parcelable を介してすべてのデータを送信する前に。Otto は Parcleable Objects を書く必要性を減らすので、私はこの方法で行きたいと思います。
回答ありがとうございます
android - Otto を使用して Activity から Fragment にデータを渡す
私のアプリケーションでは、メイン アクティビティ ビューのコンテナにフラグメントを動的に追加しています。Fragment を追加するときに Otto を使用する場合、データを渡す最良の方法を教えてください。現在、これが私がやっている方法です。たとえば、CustomObject を投稿していません。
メイン アクティビティの内部
インサイド マイ フラグメント
java - イベント バス サブスクリプションの問題 (Otto - Guava イベント バス)
イベントがサブスクライブされておらず、onMyEvent
呼び出されていない理由。関連コードは以下のとおりです。私の使用では Otto は正常に動作していますが、以下のシナリオでは、コールバック ハンドラからイベントを送信する必要があります (これは、http 呼び出しを含むコードを簡略化したものです)。これが何か関係があるかどうかはわかりません。
Otto (Guava イベント バス ベース) とDagger (Guice)を使用します。Java の専門家が、以下のバスの挿入方法と使用方法に関する問題を確認できることを願っています。
申請(モジュール登録)
ベースフラグメント
マイフラグメント
マイアクティビティ
マイイベント
main.xml
myfragment.xml
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 - ListFragment と SupportMapFragment の選択を同期する
基本的に同じデータの 2 つのビューがあります。
上記の両方は、ローダー パターンを使用して同じデータを取得しています ( LoaderCallbacks の拡張、ContentProviderのクエリなど)。
どちらも、ViewPager内の単一のアクティビティ内でホストされます。
これらのフラグメントの両方について、現在選択されているリスト項目/マーカーを同期するための最良の戦略は何ですか? (「マイ プレイス」編集 UI、または左側のペインと中央に地図がある Google マップの「ルート案内」を考えてみてください)。
これまでに考えているシナリオ:
- すべてのフラグメントが、コールバック インターフェイスを介して選択の変更について手動で相手に通知するようにします (これには、Android ドキュメントで提案されているように、フラグメント間通信を調整するための基になるアクティビティが含まれる可能性があります)。
- どういうわけか、両方のフラグメントが同じ Cursor または ListAdapter を使用するようにします (マップの意味は何であれ、カーソルから直接入力されるため)。
- (他の何か?)
誰かがこの正確なケースをすでに扱っているのではないでしょうか? (「車輪の再発明」を避けたかっただけです。あまりにも概念的な質問で申し訳ありません。)
編集(解決策)
私はMaciejが私の正確な質問(「最善の戦略」など..)に答えたと思うので、答えは1と2の両方です;-)
詳細に進むと、私の実装は次のようになりました。
最初は、Java でパブリッシャー/サブスクライバー パターンを処理する際の膨大なオーバーヘッド (インターフェイス、コールバックの適切な場所の検索など) に怯えました。幸いなことに、Ottoバスの実装が私の目に留まり、フラグメント間の通信が些細なことになりました。選択の変更についてすべてのサブスクライバーに通知できるだけでなく、Loader Patter 全体がうまく適合します。
Otto のサンプル コードから BusProvider クラスを借ります。
通知データを運ぶメッセージ コントラクトをいくつか作成します。
/li>@Subscribe を使用してフラグメント内の「レシーバー」メソッドに注釈を付けます (以下の例はローダーの場合で、選択変更の場合はそれほど複雑ではありません)。
/li>通知を「リッスン」するフラグメントを作成します。
/li>フラグメントが「生きていない」ときにリッスンを停止するようにします (特にフラグメント API に当てはまり、難しい方法で学習しました)。
/li>最後に、必要に応じて通知をトリガーします (以下の例は、カーソルが読み込まれたときにLocationListアクティビティから通知する方法を示しています)。
/li>
おまけ: 通知フローの視覚化
android - Android でのフラグメント間の通信
textField/button と TreeMenu (各要素にはチェックボックスが関連付けられています) 用とリスト用の 2 つのタブを持つ Android アプリケーションを構築しようとしています。私は ActionBarSherlock も使用しています。すでに 1 つのメイン アクティビティでプログラムを正常に記述していますが、この元のアクティビティを分割して、各タブに作成する必要がある 2 つの新しいフラグメント インスタンスに対応させる方法を理解するのに苦労しています。さらに、最初のタブにアイテムが追加されるたびに (チェック オフされているか、textField に追加されているかに関係なく)、2 番目のウィンドウのリストは更新を認識する必要があります。
アクションバーを作成するには、これを行うことができます...
タブを作成するには..
各タブの基礎となるフラグメントとそのリスナーを作成するには...
それらをアクション バーに追加するには...
これらはすべて MainActivity 内に表示されます。たとえば、ArrayList 変数を両方のフラグメントにアクセスできるようにしたいので、前述のように、リストを更新できます。私はあなたが提供できる助けを聞きたいです. Otto API がこのような目的でどのように機能するか興味がありますが、うるさいわけではありません!
android - インテントまたはイベント バスを使用して同じアプリ内で通信する
インテントを使用してシステムや他のアプリと通信する方法を理解しています。同じアプリ内でインテントを使用する方法を理解しています。また、同じアプリ内で Otto を使用して通信する方法も理解しています。
アクティビティ/サービス間で通信するために Otto とインテントを使用することの長所と短所は何ですか?
android - IntentService から投稿された Otto イベントのサブスクライブ/受信に関する問題
ここで2つの問題のうちの1つを抱えているようです。次のようなエラーのいずれか:
または、それを「対処」できたとしても、サブスクライバーでイベントを受信することはありません。
現在、私はいくつかのソースから石畳のクラスを持っており、バスをサブクラス化しています:
次のようなアクティビティで使用されます。
そして、次のように IntentService から公開します。
そして、メッセージは受信されません。別の構成でスレッド エラーが発生したので、今のところこれを使用します。
それで、私は何が欠けているか、間違っていますか?
編集: 私のコードが思ったように動作していないことを指摘してくれた以下の Andy に感謝します。上記のコードには、そのフィードバックに基づく変更が反映されています。