1、startActivityForResult 替代方案:
startActivityForResult() 方法用于返回数据给上一个 Activity。
但这个方法已经被废弃了很久,现在 Google 使用 registerForActivityResult() 方法来实现此功能。
2、registerForActivityResult() 实现
使用 registerForActivityResult() 写法,实现 SecondActivity 返回数据给 FirstActivity。
1、FirstActivity
class FirstActivity : AppCompatActivity() {
//请求返回的封装
private val requestDataLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
//返回接受的数据
if (result.resultCode == RESULT_OK) {
val data = result.data?.getStringExtra("data")
Log.d("LUO", "data =${data}")
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
var btnNext = findViewById<Button>(R.id.btn_next)
//传递的数据
btnNext.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("name","FirstActivity:小明")
requestDataLauncher.launch(intent) //调用 launch 方法,该方法接收 输入类型 I
}
}
}
2、SecondActivity
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
var btnNext = findViewById<Button>(R.id.btn_next)
//intent 必须为getIntent(),自己new Intent()获取值为null
var name = intent.getStringExtra("name")
Log.d("LUO", "name =${name}")
//返回的数据
btnNext.setOnClickListener {
val intent = Intent()
intent.putExtra("data","SecondActivity 返回数据")
setResult(RESULT_OK,intent)
finish()
}
}
}
网友评论