Android Jetpack Navigation library and onActivityResult

后端 未结 1 1784
渐次进展
渐次进展 2021-02-19 14:54

I\'m trying to migrate an app to the new Navigation Architecture Component that was announced at GoogleIO\'18

Suppose I need to use an activity that is normally started

1条回答
  •  我寻月下人不归
    2021-02-19 15:39

    The only solution I have so far is to wrap that activity behind a fragment that catches the result and then presents it to the navigation graph:

    class ScannerWrapperFragment : Fragment() {
    
        private val navController by lazy { NavHostFragment.findNavController(this) }
    
        override fun onResume() {
            super.onResume()
            // forward the call to ScannerActivity
            // do it in onResume to prevent call duplication from configuration changes
            val intent = Intent(context, ScannerActivity::class.java)
            startActivityForResult(intent, 4304357)
        }
    
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            if (requestCode == 4304357) {
                if (resultCode == RESULT_OK) {
    
                    val params = Bundle().apply {
                        putString("scan_result", data?.extras?.getString("scan_result"))
                    }
                    //present the scan results to the navigation graph
                    navController.navigate(R.id.action_scanner_to_result_screen, params)
    
                } else {
                    navController.popBackStack()
                }
            } else {
                super.onActivityResult(requestCode, resultCode, data)
            }
    
        }
    
    }
    

    0 讨论(0)
提交回复
热议问题