Cod*_*ham 3 c# java xamarin.android xamarin
我已经为一个java库创建了一个绑定,它作为扫描仪SDK的一部分提供,模型是Honeywell Dolphin CT50.但是,在我的理解中,我遇到了一些问题.
以下示例在Java中给出.Create方法需要一个接口实现.但是,我还没有意识到在仍然访问类范围变量时覆盖接口的'onCreated'方法的类似方法.这是我遇到麻烦,我怎么能在C#中做到以下几点.
Java的:
private static BarcodeReader barcodeReader;
private AidcManager manager;
public void onCreate(Bundle savedInstanceState) {
// create the AidcManager providing a Context and a
// CreatedCallback implementation.
AidcManager.create(this, new CreatedCallback() {
@Override
public void onCreated(AidcManager aidcManager) {
manager = aidcManager;
barcodeReader = manager.createBarcodeReader();
}
});
}
Run Code Online (Sandbox Code Playgroud)
在.NET中,编译器不会像上面那样执行并将接口实现为匿名类型,因此我必须实现接口.但是,我怎么能分配类宽变量?
我的C#:
NameSpace Scanner {
private static BarcodeReader barcodeReader;
private AidcManager manager;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
CreateCallback callback = new CreateCallback() { };
AidcManager.Create(this, callback.OnCreated(AidcManager aidcManager));
}
public class CreateCallback : AidcManager.ICreatedCallback
{
public IntPtr Handle
{
get
{
throw new NotImplementedException();
}
}
public void Dispose()
{
throw new NotImplementedException();
}
public void OnCreated(AidcManager p0)
{
// How can I initialize the manager and barcode reader variables in the class above from here?
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个CreateCallback具有其他回调作为构造函数参数的回调实现successAction.这通过回调OnManagerCreated将在被调用OnCreated的CreateCallback.
重要说明:如果实现Java接口,则必须继承Java.Lang.Object.不要不落实Handle和Dispose()你自己的.
活动
public class MyActivity : Activity
{
private static BarcodeReader _barcodeReader;
private AidcManager _manager;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
CreateCallback callback = new CreateCallback(OnManagerCreated) { };
AidcManager.Create(this, callback);
}
private void OnManagerCreated(AidcManager manager)
{
_manager = manager;
_barcodeReader = manager.CreateBarcodeReader();
}
}
Run Code Online (Sandbox Code Playgroud)
回调实现
public class CreateCallback : Java.Lang.Object, AidcManager.ICreatedCallback
{
private Action<AidcManager> _successAction;
public CreateCallback(Action<AidcManager> successAction)
{
_successAction = successAction;
}
public void OnCreated(AidcManager p0)
{
_successAction(p0);
}
}
Run Code Online (Sandbox Code Playgroud)
其他可能性
您也可以直接在您的活动类中实现界面
public class MyActivity : Activity, AidcManager.ICreatedCallback
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |