Zxing 条形码:我在使用 androidx.fragment.app.Fragment 的片段中遇到类型不匹配错误

Xzing barcode : I'm getting type mismatch error in fragment using androidx.fragment.app.Fragment

我正在使用 Android studio 4.0,在 Kotlin 中编码,我在 Android 方面还是个新手 development.I 需要集成 Xzing 条形码库。我从 [https://tutorialwing.com/implement-android-qr-code-scanner-using-zxing-library-in-kotlin/][1] 的教程中复制了一些代码。本教程使用以下导入语句:

import android.app.Fragment

我修改了一个使用导航抽屉 Activity 模板生成的片段。它使用 androidx 片段导入语句:

import androidx.fragment.app.Fragment

在以下带有“this”引用的行中发生的错误:

qrScanIntegrator = IntentIntegrator.forFragment(this)

错误是:

Type mismatch: Required Fragment! found HomeFragment

不建议将旧版本的导入更改为旧版本,如果这样做,我会遇到很多其他错误。

如何让 zxing 与 androidx 片段一起工作? 谢谢

ZXing 库不再维护,特定的 class (IntentIntegrator) 仅支持 android.app.Fragment,这是 [=] 的已弃用 Android 框架版本49=]X Fragment class.

这里有几个可能的选择:

  1. 分叉 ZXing 库,并更改 android.app.Fragment 导入以使用 androidx.fragment.app.Fragment 版本。

  2. IntentIntegrator 调用委托给您的 Activity,并将结果转发给您的 Fragment

  3. 只需将 IntentIntegrator 中的 Intent initialization code 复制到您自己的助手 class。 IntentIntegrator 方法只是构建 Intent 和调用 startActivityForResult() 的便捷方法。您仍然可以使用 IntentIntegrator.parseActivityResult 方法来解释返回的结果。

我建议选择选项 #3。

作为长期替代方案,您可能还需要考虑研究 Firebase ML Kit,因为 ZXing 已不再维护。