2013年5月3日金曜日

OnActivityForResultCallbackFragmentというモノを作ってみました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
 どうもActivityだのFragmentだのの、startActivityForResult()とonActivityResult()の流れがすげーめんどいので何とかしたいと思いつつまぁいいかーと思っていたのだけど、やっぱだるいので何とかしようかなと。で、丁度Fragment触っていたのでFragmentを先にサポートしてみました。

仕組み


 OnActivityForResultCallbackFragmentはFragmentを継承しており、内部にOnActivityResultListenerインタフェースを定義してます。メンバ変数にSparseArrayを持ち、startActivityForResult()の第三引数にOnActivityResultListenerを取る様にしています。渡されたOnActivityResultListenerをrequestCodeをキーとしてSparseArrayに保存し、onActivityResult()の時に取り出してコールバックを呼ぶ、だけです。詳しくは以下の実装を見て下さい。

コード


 Gistです。上段のコードがOnActivityForResultCallbackFragmentです。下段は使い方です。OnActivityForResultCallbackFragmentを継承してstartActivityForResultにコールバック渡すだけです。これFragmentだけどextendsの所と名前をActivityにすればそのまま使えるはず。


おわりに


 ありそうで無かったような。実はありそうな。とりあえず継承して使わないといけない点が気に入らないけど一応動くし、onActivityResult()を介す事で実装がバラけるのは防げるので、サクッとstartActivityForResult()したい時には便利なんだろうなぁと。

0 件のコメント:

コメントを投稿