欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

解决is attempting to registerForActivityResult after being created. Fragments must call registerForActiv

程序员文章站 2022-01-09 09:50:00
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,注册体需...

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))
        }
    }
}

本文地址:https://blog.csdn.net/jingzz1/article/details/108142784