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()
で呼んだIntent
をFragmentActivity#onActivityResult()
で処理をしたかったができない。
具体的には、Fragment#startActivityForResult()
の第二引数にrequestCode
に1
を指定したのですが、FragmentActivity#onActivityResult()
の第一引数で受け取られる値は65537
でした。
どういうことなのかさっぱりわからなかったところ、この記事に救われました。
解決方法
なるほど。
requestCode
によってActivityから呼ばれたのかFragmentから呼ばれたのかを判別しているんですね。
なので、今回のようにrequestCode
を1
に指定した場合65537
で返ってくるので、その値の下位16ビットを取得する必要があるようです。
具体的には、下記のようになります。
playground.kt
fun main() {
val requestCode = 65537
val newRequestCode = requestCode and 0xffff
println("newRequestCode: $newRequestCode")
}
実行結果...
newRequestCode: 1
これで、FragmentActivity#onActivityResult()
の条件式で比較できるようになりました。
おわりに
公式をガリガリ読んでいけるようになりたい。。。