TL;DR
受け取った requestCode の下位16ビットを取得する...だけです。
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ビットを取得する必要があるようです。
具体的には、下記のようになります。
fun main() {
val requestCode = 65537
val newRequestCode = requestCode and 0xffff
println("newRequestCode: $newRequestCode")
}
newRequestCode: 1
これで、FragmentActivity#onActivityResult()の条件式で比較できるようになりました。
おわりに
公式をガリガリ読んでいけるようになりたい。。。