Android Fragment迁移代码出现Context类型不匹配等错误修复咨询
错误原因
所有7处编译错误均为Activity代码迁移Fragment时的上下文传参错误,不属于业务逻辑实现问题:Activity本身是Context的子类,你在Activity中直接传this的代码迁移到Fragment后,Fragment本身不是Context或Activity类型,才会触发类型不匹配报错。
修复方案
统一替换所有错误位置的传参:
- 需要
Context参数的位置,用Fragment的requireContext()方法获取当前附着的上下文实例 - 需要
Activity参数的位置,用Fragment的requireActivity()方法获取当前依附的Activity实例
逐行修改对应
- 第63行:把
this@ImportFragment替换为requireContext()
修改后代码:inputImage = InputImage.fromFilePath(requireContext(), data?.data) - 第70行:把
this@ImportFragment替换为requireContext()
修改后代码:val builder=AlertDialog.Builder(requireContext()) - 第120行:把
this@ImportFragment替换为requireContext()
修改后代码:if(ContextCompat.checkSelfPermission(requireContext(), permission)== PackageManager.PERMISSION_DENIED){ - 第121行:把
this@ImportFragment替换为requireActivity()
修改后代码:ActivityCompat.requestPermissions(requireActivity(), arrayOf(permission),requestCode) - 第133、141、145行共3处Toast调用:把
this@ImportFragment替换为requireContext()
示例修改后代码:Toast.makeText(requireContext(), "Camera Permission Denied", Toast.LENGTH_SHORT).show()
额外运行提示
你当前代码中barcodeScanner仅声明没有初始化,编译通过后运行会抛出空指针异常,需要在使用前添加初始化代码,示例如下:
// 可以放在onViewCreated方法中,使用前初始化即可 barcodeScanner = BarcodeScanning.getClient() // 需要补充导入:import com.google.mlkit.vision.barcode.BarcodeScanning
内容的提问来源于stack exchange,提问作者Low Jung Xuan
相关产品推荐
相关产品推荐

