就是說,如果要為返回的結果注冊監聽器的話,不能在fragment或activity已經創建好了再調用。
可以放在字段中:
class CrimeFragment : Fragment() { ... private val aLauncher = registerForActivityResult(ActivityResultContracts.PickContact()) { uri: Uri? -> doWhenChooseSuspect(uri) } private val requestPermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted: Boolean -> if (isGranted) { aLauncher.launch() } else { Toast.makeText( context, "we need the permission to get suspect", Toast.LENGTH_LONG ).show() } } ......
文檔有這么一段話:This *must* be called unconditionally, as part of initialization path, typically as a field initializer of an Activity or Fragment.
