is attempting to registerForActivityResult after being created. Fragments must call registerForActivityResult() before they are created (i.e. initialization, onAttach(), or onCreate())
fragment:1.3.0-alpha08 之后,需要在Fragment注册registerForActivityResult时,注册体需要写在onAttach() 或 onCreate()里
举个例子,AFragment需要跳转到BActivity,并且获取到BActivity的回调数据,需要这么写
class AFragment : Fragment() {
private lateinit var binding:FragmentABinding
private lateinit var startActivitylaunch: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startActivitylaunch = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
//获取到BActivity回传的数据
val resultCode = it.resultCode
val data = it.data
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentABinding.inflate(inflater,container,false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.btn1.setOnClickListener {
//打开ActivityB
startActivitylaunch.launch(Intent(requireContext(),BActivity::class.java))
}
}
}