Activity A
- リストを持つ、リストの項目には favorite ボタンがある
- リストの項目をタップすると Activity B に遷移する
Activity B
- favorite ボタンがある
このとき、Activity B で favorite ボタンの状態が変わったことを Activity A に伝えて Activity A の見た目を変えたい
Activity A に伝える方法は何が最適なんだろう?
1) otto/EventBus 系
2) BroadcastReceiver
3) フラグ(SharedPreferenceとか)を書き換えて、onStartでリロードをかける
4) onActivityResult でリロードをかける
5) Service で Binding(Serviceにキャッシュさせて onStart で毎回 Service から取得)
6) CursorLoader(cursor.registerContentObserver() を使って状態を監視している)
7) その他
悩ましい...
1)
otto/EventBus 系のエントリって、onResume() や onStart() で register して onPause() や onStop() で unregister しているものが多い、この場合 Activity A はバックグラウンドに回ってしまうので、使用例として適切ではないのかもしれない?
ちなみに EventBus の HOWTO では onStart() で register して onStop() で unregister している。
otto のサンプル では onResume() で register して onStop() で unregister している。
2)
コードが見づらくなりそう?
(バックスタックの Activity を全部消したいときとかに使ってるらしい)
これも onResume() で register して onPause() で unregister するのがセオリーなんだろうなと思うんだけど、https://developer.android.com/training/run-background-service/report-status.html のサンプルは onCreate() で register して onDestroy() で unregister してた。ただわりと前のサンプルなのでなんとも言えない。
3)
わりと素直にかけそうだけど、ルールが見えづらいかも
4)
これのために startActivityForResult にするのもどうなんだろう
5)
これだけのために Service かー
6)
ContentProvider のデータを表示するときはこれが楽。ただし、ローカルデータだけならいいけど、サーバーが絡むと同期問題が...
0 件のコメント:
コメントを投稿