Android Fragmentから呼ばれたActivityのonActivityResult()でrequestCodeを受け取るときの注意点


TL;DR

受け取った requestCode の下位16ビットを取得する...だけです。


MainActivity.kt

class MainActivity : AppCompatActivity() {


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val newRequestCode = requestCode and 0xffff

if (newRequestCode == "比較対象") {
// 処理
}

}
}



背景

Fragment#startActivityForResult() で呼んだIntentFragmentActivity#onActivityResult()で処理をしたかったができない。

具体的には、Fragment#startActivityForResult()の第二引数にrequestCode1を指定したのですが、FragmentActivity#onActivityResult()の第一引数で受け取られる値は65537でした。

どういうことなのかさっぱりわからなかったところ、この記事に救われました。


解決方法

なるほど。

requestCodeによってActivityから呼ばれたのかFragmentから呼ばれたのかを判別しているんですね。

なので、今回のようにrequestCode1に指定した場合65537で返ってくるので、その値の下位16ビットを取得する必要があるようです。

具体的には、下記のようになります。


playground.kt

fun main() {

val requestCode = 65537
val newRequestCode = requestCode and 0xffff
println("newRequestCode: $newRequestCode")
}


実行結果...

newRequestCode: 1


これで、FragmentActivity#onActivityResult()の条件式で比較できるようになりました。


おわりに

公式をガリガリ読んでいけるようになりたい。。。