0
点赞
收藏
分享

微信扫一扫

register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.

快乐小码农 2022-03-11 阅读 71

错误信息:

意思就是registerForActivityResult不可以在生命周期STARTED之前调用

错误代码示例:

override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     setContentView(R.layout.activity_main)

     findViewById<Button>(R.id.float_bth).setOnClickListener {
         val registerForActivityResult =
             registerForActivityResult(ActivityResultContracts.StartActivityForResult()
             ) {
                 // ...
             }
         registerForActivityResult.launch(intent)
     }
 }

注意:上面代码中将registerForActivityResult的创建设置在了点击事件的内部,而此时的APP状态是RESUMED

解决:将registerForActivityResult的创建移动到onCreate()中去

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val registerForActivityResult =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()
        ) {
            // ...
        }

    findViewById<Button>(R.id.float_bth).setOnClickListener {
        registerForActivityResult.launch(intent)
    }
}

另外:如果使用fragment,需要设置在fragmentonCreate()

参考:

举报

相关推荐

0 条评论