2015年7月31日金曜日

FragmentのからActivity/ParentFragmentへのEvent通知

FragmentのからActivity/ParentFragmentへのCallbackにInterfaceの定義とアタッチが面倒くさい!

  • 専用Callback
    • Activity/ParentFragmentでCallback Interface実装
    • FragmentでCallbackの登録
      • onAttachでActivityをCallback Interfaceにキャストして登録
      • getParentFragmenでCallback Interfaceにキャストして登録
        • Fragment側で親を意識しなければならない!!
    • 個々のCallback Interfaceの設計と実装
      • 複数のFragmentの数だけCallbackが必要!!
      • タイプセーフティ?
  • 汎用Callback
    • Activity/ParentFragmentでCallback Interface実装
    • FragmentでCallbackの登録
      • onAttachでActivityをCallback Interfaceにキャストして登録
      • getParentFragmenでCallback Interfaceにキャストして登録
        • Fragment側で親を意識しなければならない!!
    • Callback Interfaceの実装は一つ
      • 汎用化の為、Bundleにオブジェクト格納
        • どのFragmentからのCallbackであるか識別が必要!!
        • Bundleからキー指定してイベント通知内容を取得
  • LocalBroadcastManager
    • Activity/ParentFragmentでIntentFilterを指定してレシーバーを登録
    • FragmentからIntentをブロードキャスト
    • 汎用化の為、IntentのBundleにオブジェクト格納
      • どのFragmentからのCallbackであるか識別が必要!!
      • Bundleからキー指定してイベント通知内容を取得
    • 必ずMainスレッドメッセージの送受信
  • Event Bus (Otto)
    • Activity/ParentFragmentでBusを登録
    • FragmentでBusを登録
    • Activity/ParentFragmentでSubscribeメソッド実装
    • FragmentでProduceメソッドを実装
    • ProduceとSubscribeのインターフェースはPOJOのEventオブジェクト
    • Eventオブジェクトなのでタイプセーフティ
    • デフォルトではMainスレッド以外ではメッセージ送信(Produce)は出来ない。
      • Busインスタンス作成時にThreadEnforcer.ANYを指定すれば、他のスレッドからメッセージ送信できる。
      • しかし、Subscribeメソッドがメッセージ送信時スレッドで実行されてしまいスレッド管理が煩雑
      • runOnUiThread でMainスレッドで実行させる仕組みが必要
    • 何処のクラスからでもメッセージ送信(Produce)で来てしまうので、煩雑化する。
      • DialogFragmentのAlertDialogのOnClickCallbackからActivityに通知できる...
      • 意図しない箇所でSubscribeされる。


    android - LocalBroadcastManager vs using callbacks - Stack Overflow http://stackoverflow.com/questions/13948720/localbroadcastmanager-vs-using-callbacks

    Otto square.github.io/otto/
    Does Otto use weak references to store objects passed to register()?
    https://plus.google.com/101050435280754106754/posts/PGygiXURaTW

    EventBus - torutkの日記 http://d.hatena.ne.jp/torutk/20110407/p1

    0 件のコメント:

    コメントを投稿