如何为ZXingScannerFragment创建Fragment适配器?

时间:2019-01-27 14:15:26

标签: c# android xamarin.android

我想使用ZXing条形码扫描仪作为片段,但是我必须从ZXingScannerFragment类中提供一个自定义类,以便能够进行OnScanResult()事件({{3 }})。问题是,现在我无法将此ScannerFragment转换为Fragment类型变量,因为其类型是ScannerFragment,是从ZXing.Mobile.ZXingScannerFragment传递,是从Android.Support.V4.App.Fragment传递。

我的想法是创建另一个Fragment,并将其所有功能连接到此ScannerFragment,因此,我可以像具有正常功能的Fragment一样使用ScannerFragment,同时拥有所有ZXingScannerFragment的功能。 / p>

嗯,它不起作用。至少在将其添加到布局时不会显示。

我的适配器如下:

public class BetaScannerFragment : Fragment
{
    ScannerFragment scannerFragment;
    public BetaScannerFragment()
    {
        scannerFragment = new ScannerFragment();
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        return scannerFragment.OnCreateView(inflater, container, savedInstanceState);
    }
}

任何想法如何创建这样的适配器?谢谢!

TL; DR:我需要一个像ZXingScannerFragment

的片段

1 个答案:

答案 0 :(得分:0)

欢迎马赛尔

您可以在片段内使用ZXingScannerView而不是ZXingScannerFragment

并用于实施ZXingScannerView

  1. ZXingScannerView中定义onCreate的实例

    
    ZXingScannerView scannerView = new ZXingScannerView(context)
    
  2. 设置其配置

    // these are required config for me. you should set what you need!
    scannerView.setFormats(arrayListOf(BarcodeFormat.CODE_128));
    scannerView.setResultHandler(this);
    scannerView.setAspectTolerance(0.9f);
    scannerView.startCamera(-1);
    scannerView.setAutoFocus(true);
    
  3. 将其添加到放置在XML中的FrameLayout之类的容器中 (barcode_container)

        barcode_container.addView(scannerView)
    
  4. 您的片段应实现ZXingScannerView.ResultHandler并 在handleResult(Result rawResult)中写下您的逻辑:

      try {
          // play a beeb for successful detection
          // doSth(rawResult.text)
       } catch (e: Exception) {
          e.printStackTrace()
          // show a failure toast 
       }