我读过的所有指南总是指在活动OnCreate的上下文中初始化Xamarin Forms对象,即
Forms.Init(context,bundle);
但我更喜欢通过
在Application对象中注册表单对象Forms.Init(App.Context,null);
这样做有什么问题吗?
答案 0 :(得分:1)
来自here:
Xamarin.Forms是一个跨平台的UI工具包,允许开发人员有效地创建可在iOS,Android和通用Windows平台应用程序之间共享的本机用户界面布局。
因此,Xamarin.Forms只是Xamarin.Android的第三部分lib。如果要使用它,则需要先调用Forms.Init()
方法,然后在Activity中调用LoadApplication(new App());
方法。
您应在致电Forms.Init()
之前致电LoadApplication(new App());
。
应用程序实例是在应用开始时创建的,因此您可以将Forms.Init()
移至应用程序的OnCreate
方法,如下所示:
[Application]
public class MyApplication : Android.App.Application
{
protected MyApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public override void OnCreate()
{
base.OnCreate();
Forms.Init(this, null);
}
}
您可以阅读this以了解您需要添加(IntPtr, JniHandleOwnership)
构造函数的原因。
从您的代码Forms.Init(App.Context,null);
,我不知道App.Context
是什么。也许你的意思是Android.App.Application.Context
?
答案 1 :(得分:0)
在VS创建的空白表单应用程序中,上述语句如下所示:
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
...
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
Init
方法中的bundle
参数似乎未使用;还请注意评论:
// Provide backwards compat for Forms.Init and AndroidActivity
// Why is bundle a param if never used?
public static void Init(Context activity, Bundle bundle)
{
...