美文网首页
Activity中startActivityForResult和

Activity中startActivityForResult和

作者: WangKiven | 来源:发表于2022-10-27 12:07 被阅读0次

    使用registerForActivityResult

    class LaunchActivity : AppCompatActivity() {
        private val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            if (it.resultCode != Activity.RESULT_OK) finish()
            else findViewById<View>(R.id.toWx).visibility = View.VISIBLE
        }
    
      ......
    
      // launcher 使用方法
      launcher.launch(Intent(this, LoginActivity::class.java))
    }
    
    • registerForActivityResult第一个参数有两个值:ActivityResultContracts.StartActivityForResult()ActivityResultContracts.StartIntentSenderForResult()。使用第二个值时launcher的使用方法,如下:
    class LaunchActivity : AppCompatActivity() {
        private val launcher = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) {
            if (it.resultCode != Activity.RESULT_OK) finish()
            else findViewById<View>(R.id.toWx).visibility = View.VISIBLE
        }
    
      ......
    
      // launcher 使用方法。这个就有点麻烦了
      launcher.launch(IntentSenderRequest.Builder(PendingIntent.getActivity(this, 345, Intent(this, LoginActivity::class.java), 0)).build())
      // launcher 删除图片。这个应该才是正常操作吧
      val pi = MediaStore.createTrashRequest(
            contentResolver,
            uris,
            true
       )
       launcher.launch(IntentSenderRequest.Builder(pi.intentSender).build())
    }
    
    • registerForActivityResult必须在 Activity started 之前使用,否则报错。这种使用方式反而比较麻烦,不知道为啥换成这种使用方式。
    • ActivityCompat.startActivityForResult(this, Intent(this, LoginActivity::class.java), 7788, null)这个方法没有被标记过时,但是处理返回值还是在过时方法onActivityResult里面处理。所以这个方法好像也没用。

    总结

    • startActivityForResult 和 onActivityResult 虽然过时还是可以继续使用的,对于老项目,也不急着修改,万一以后有新的好用点的api可以使用呢!
    • 对于新项目,还是使用 registerForActivityResult 吧!目前感觉 registerForActivityResult 并不好封装,因为没有requestCode来标记请求的哪个 Activity 。如果 resultCode能区分请求的哪个 Activity 的话,到是可以封装一下。
    • 也许是不推荐用 Activity,多用fragment吧!fragment 中 startActivityForResult 和onActivityResult 没有过时,navigation-fragment用起来。

    相关文章

      网友评论

          本文标题:Activity中startActivityForResult和

          本文链接:https://www.haomeiwen.com/subject/vraxtdtx.html