私は昨日スクエアでOTTOを使い始めましたが、これまでは良いスタートを切っていました。他のアクティビティのOTTOとフラグメント
FragmentActivityでホストされているFragmentが既に存在し、そのFragmentActivityでホストされているFragment間の通信が必要な場合、Ottoは素晴らしい機能を発揮します。
すでにホストされている場合は、あなたの#onResume()Methodeのが呼び出されるとフラグメントはEventbusに自身を登録することができます
@Override
public void onResume()
{
super.onResume();
BusProvider.getInstance().register(this);
}
私の問題:
余分に埋め込まれているフラグメントイベントバスを介してイベントを受け取るべきアクティビティは次のようになります:
public AnotherFragmentHostedInSomeActivity extends Fragment
{
.....
@Subscribe
public void onSomethingHappend(final Event event)
{
final SomeObject deliveredObject = event.getSomeObject();
public class SomeFragmentSendingDataToAnotherFragment extends Fragment
{
...
private void sendData()
{
final Intent intent = new Intent(applicationContext, SomeActivity.class);
applicationContext.startActivity(intent);
BusProvider.getInstance().post(new Event(someObject));
既に表示される場合がありますように、このコードは危険なである:まだあなたがそこにこのようなコードフラグメントをホスティング別活動を呼び出したいとき複雑です。アクティビティを開始し、ライフサイクルのためにそのアクティビティが実行できないフラグメントにデータを送信します。アクティビティが作成され、Fragementsも作成されます。ある時点でonResumeメソッドが呼び出されるので、Fragementは@Subscribeを使って自分自身を登録することができます。しかし、これはすべての後にのイベントがEventBus経由で投稿された後に発生します。したがって、Interrestの断片は、EventBusによって決して呼び出されません。
これをスマートな方法で行う方法は誰でも知っていますか?
いくつかの追加情報があります: 私は昨日OTTOで素敵なプレイバックをしました。私のケースでは、APPがタブレットではなくスマートフォンで実行されているときに、別のアクティビティにデータを送信する必要があるときに、問題がプロジェクトでのみ発生します。 IntentとParcelableですべてのデータを送信する前に。オットーはParcleable Objectsを書く必要性を減らすので、私はこのようにしたいと思います。
回答ありがとうございました
を削除していただきありがとうございます。私はバスができることのdiffernt印象を持っていた。ライフサイクルは単にゲームをプレイしません。だから私はまだ私の断片が何らかの種類のタブレットや電話のモードでイベントを起こすかどうかを知る必要があります。 – Kitesurfer