onActivityResult
次のように呼び出しをフラグメントに転送できます。
リクエスト コードを 16 ビット分ビット単位でシフトする必要があります。
public static final int REQUEST_CHECK_SETTINGS = 1<<16; //shifted 1 16 bits
これをフラグメントを所有するアクティビティに追加します。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
onActivityResult
注: FragmentActivityのソース コードからこれを理解しました。requestCode の 16 ビットを右にシフトしています。
/**
* Dispatch incoming result to the correct fragment.
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mFragments.noteStateNotSaved();
int index = requestCode>>16;
if (index != 0) {
index--;
final int activeFragmentsCount = mFragments.getActiveFragmentsCount();
if (activeFragmentsCount == 0 || index < 0 || index >= activeFragmentsCount) {
Log.w(TAG, "Activity result fragment index out of range: 0x"
+ Integer.toHexString(requestCode));
return;
}
final List<Fragment> activeFragments =
mFragments.getActiveFragments(new ArrayList<Fragment>(activeFragmentsCount));
Fragment frag = activeFragments.get(index);
if (frag == null) {
Log.w(TAG, "Activity result no fragment exists for index: 0x"
+ Integer.toHexString(requestCode));
} else {
frag.onActivityResult(requestCode&0xffff, resultCode, data);
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
注2:この方法を使用することが悪いアプローチである理由を誰かが教えてくれたらうれしいです