LoginSignup
5
2

More than 3 years have passed since last update.

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

Posted at

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()の条件式で比較できるようになりました。

おわりに

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

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2