Android startActivityForResult Kotlin写法

Android activity之间可以相互传递数据,从MainActivity传递数据到SecondActivity中,也可以由SecondActivity返回数据给回到MainActivity。

向下一个Activity传递数据

 Intent在启动Activity过程中可以传递数据。Intent中提供了putExtra方法进行重载,举例来讲:将字符串从一个Activity中传递至第二个Activity中。

        button1.setOnClickListener {
            val data = "Hello SecondActivity"
            val intent = Intent(this, SecondActivity::class.java)
            //putExtra接受的是键值对,第一个参数是键,用于后面取值;第二个是真正要传递的数据
            intent.putExtra("extra_data", data)
            startActivity(intent)
        }

  在第二个Activity中将传递的数据拿出,并将其打印出来。

class SecondActivity : AppCompatActivity() {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.layout_second)
        //intent调用的是getIntent方法,会获取用于启动SecondActivity的Intent,getStringExtra获取到传递的数据
        //getIntExtra拿到的是整形;getBooleanExtra拿到的是布尔类型
        val extradata = intent.getStringExtra("extra_data")
        Log.d("SecondActivity", "extra data is $extradata")
    }
}

返回数据给上一个Activity

既可以传递数据给下一个Activity,那么将数据返回给一个Activity也是可行的。

        button1.setOnClickListener {
            val intent = Intent(this, SecondActivity::class.java)
            startActivityForResult(intent, 1)
        }

startActivityForResult方法接受两个参数:第一个参数是Intent,第二个参数是请求码。用于在之后的回调中判断数据来源。

class SecondActivity : AppCompatActivity() {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.layout_second)
        button2.setOnClickListener {
            //Intent传递数据,没有任何意图,只需要将数据存放进去
            val intent = Intent()
            intent.putExtra("data_return", "Hello FirstActivity")
            //setResult接受两个参数:第一个是用于向上一个Activity返回处理结果,一般是RESULT_OK或者RESULT_CANCELED
            //第二个是带有数据的intent传递过去。最后调用finish销毁。
            setResult(Activity.RESULT_OK, intent)
            finish()
        }
    }
}

最后需要在第一个Activity重写方法得到返回的数据。

  //第一个参数requestCode是启动Activity时传入的请求码;第二个参数resultcode是返回数据传入的处理结果
    //第三个参数是data数据,携带intent。
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        //requestcode是判断数据来源
        when (requestCode) {
            //resultcode是判断处理结果是否成功与否。
            1 -> if (resultCode == Activity.RESULT_OK) {
                val returnedData = data?.getStringExtra("data_return")
                //将data值打印出来
                Log.d("MainActivity", "returned data is $returnedData")
            }
        }
}

   那么如果用户不是通过点击事件返回,而是点击Back键回到第一个Activity,如何处理?通过在第二个Activity中重写onBackPressed方法来解决这个问题。

    override fun onBackPressed() {
        val intent = Intent()
        intent.putExtra("data_return", "Hello FirstActivity")
        setResult(Activity.RESULT_OK, intent)
        finish()
    }

猜你喜欢

转载自blog.csdn.net/cpcpcp123/article/details/108181778