使用应用程序上下文初始化Xamrin Forms对象是否有任何问题

时间:2018-06-12 01:23:03

标签: xamarin.forms xamarin.android

我读过的所有指南总是指在活动OnCreate的上下文中初始化Xamarin Forms对象,即

Forms.Init(context,bundle); 

但我更喜欢通过

在Application对象中注册表单对象
Forms.Init(App.Context,null);

这样做有什么问题吗?

2 个答案:

答案 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)
{
    ...