在我的Xamarin.Android应用程序中,我想使用ZXing扫描条形码。我想在活动视图中显示扫描仪。
代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="5">
<Button
android:text="Scan with Default Overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonScanDefaultView"
android:layout_weight="1" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scanView"
android:layout_weight="2" />
</LinearLayout>
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
scannerFragment = new ZXingScannerFragment ();
scannerFragment.CustomOverlayView = CustomOverlayView;
scannerFragment.UseCustomOverlayView = UseCustomOverlayView;
scannerFragment.TopText = TopText;
scannerFragment.BottomText = BottomText;
this.FragmentManager.BeginTransaction ()
.Replace (Resource.Id.scanView, scannerFragment, "ZXINGFRAGMENT")
.Commit ();
}
我收到一条错误,指出我无法将support.v4.fragment转换为android.app.Fragment。
任何人都可以告诉我我做错了什么,我应该如何处理这个以获取扫描视图(ZXing)在我当前活动的布局中。
答案 0 :(得分:1)
ZXingScannerFragment
派生自Android.Support.V4.App.Fragment
,而Activity.FragmentManager
则预期派生自Android.App.Fragment
的片段。
现在,如何解决这个问题:
从任何适用于Android.Support.V4的活动继承您的活动。最简单的方法是使用Android.Support.V4.App.FragmentActivity
软件包已安装的软件包Xamarin.Android.Support.v4
中的ZXing.Net.Mobile
作为依赖项。
如果您有正确的活动,则可以使用this.SupportFragmentManager
代替this.FragmentManager
来处理基于Support.V4的片段。
所以,你的布局很好。代码应该更新为:
using Android.App;
using Android.Widget;
using Android.OS;
using ZXing.Mobile;
using Android.Support.V4.App;
namespace ZXingSample
{
[Activity(Label = "ZXing Sample", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : FragmentActivity
{
int count = 1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
var scannerFragment = new ZXingScannerFragment();
scannerFragment.UseCustomOverlayView = false;
scannerFragment.TopText = "Scan your code";
scannerFragment.BottomText = "Then proceed";
this.SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.scanView, scannerFragment, "ZXINGFRAGMENT")
.Commit();
}
}
}
启动应用程序,您将看到您的扫描仪: