西安做网站的公司维护,免费logo设计在线生成器钙网,痘痘该如何去除效果好,网页制作模板怎么制作提示#xff1a;此文章仅作为本人记录日常学习使用#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、使用registerForActivityResult()方法 一、使用registerForActivityResult()方法
startActivityForResult()方法在appcompat库1.3.0或更高版本中被废弃了此文章仅作为本人记录日常学习使用若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、使用registerForActivityResult()方法 一、使用registerForActivityResult()方法
startActivityForResult()方法在appcompat库1.3.0或更高版本中被废弃了在新版的AndroidX库中startActivityForResult()也被标记为弃用。我们可以使用使用registerForActivityResult()方法来替代startActivityForResult()方法。 例如我们需要实现从FirstActivity页面跳转到SecondActivity页面然后期望在SecondActivity页面被销毁时向FirstActivity页面返回结果和数据。那么我们的FirstActivity.kt可以这么写
class FirstActivity: AppCompatActivity() {private lateinit var mBinding: ActivityFirstBindingprivate val requestDataLauncher //注册ActivityResult的观察者 当启动的Activity返回结果时 这个观察者会被触发registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -if (result.resultCode RESULT_OK) {val data result.data?.getStringExtra(mData)Toast.makeText(this,data,Toast.LENGTH_SHORT).show()}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mBinding ActivityFirstBinding.inflate(layoutInflater)setContentView(mBinding.root)mBinding.mButton1.setOnClickListener {val intent Intent(this, SecondActivity::class.java)//通过ActivityResult观察者启动一个Activity 并在其销毁后返回结果requestDataLauncher.launch(intent)}}
}我们先是注册ActivityResult的观察者当SecondActivity销毁并返回结果给FirstActivity时这个观察者中就会被触发然后会执行我们添加的代码逻辑。这里我们先判断SecondActivity是否处理成功如果处理成功则将SecondActivity返回的数据用Toast显示出来。 接下来我们看一下如何让SecondActivity.kt在销毁时返回数据给FirstActivity
class SecondActivity: AppCompatActivity() {private lateinit var mBinding: ActivitySecondBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mBinding ActivitySecondBinding.inflate(layoutInflater)setContentView(mBinding.root)mBinding.mButton2.setOnClickListener {val data This is data for FirstActivity!val intent Intent()// 将数据存放到intent中intent.putExtra(mData, data)setResult(RESULT_OK, intent)finish()}}
}在SecondActivity中当我们点击mButton2按钮时首先将要传递的数据存放到intent中。然后通过setResult()方法将处理结果和带有数据的intent一起返回给FirstActivity最后销毁SecondActivity。