c# – 当调用IntPtr构造函数时,Xamarin Android会执行OnCreateView吗?

前端之家收集整理的这篇文章主要介绍了c# – 当调用IntPtr构造函数时,Xamarin Android会执行OnCreateView吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道Xamarin Android中的构造函数难度,如下所述:
No constructor found for … (System.IntPtr,Android.Runtime.JniHandleOwnership)

以及所有碎片和活动&我在app中创建的其他自定义视图导入此构造函数.

但有时会在OnCreateView方法中抛出空引用异常.
例:

public class TestView: Android.Support.V4.App.Fragment{

    public TestClass _testClass;

    public TestView (TestClass testClass)
    {
        this._testClass = testClass;
    }

    public TestView(IntPtr javaReference,Android.Runtime.JniHandleOwnership transfer) : base(javaReference,transfer)
    {
    }

    public override Android.Views.View OnCreateView (Android.Views.LayoutInflater inflater,Android.Views.ViewGroup container,Android.OS.Bundle savedInstanceState)
    {
        View view = inflater.Inflate (Resource.Layout.Fragment_TestView,container,false);

        _testClass.ExecuteTestMethod();

        return view;
    }

}

这段代码在OnCreateView中抛出了一个空引用异常,偶尔会出现这种情况.这很少发生,从来没有直接从代码创建视图然后测试它.

现在很明显,此代码中唯一可以抛出异常的点是_testClass变量.
所以现在显然我的问题是,当调用javaReference构造函数时,是否还执行了OncreateView方法

解决方法

即使在Java中,onCreateView也可以在构造函数不可用的情况下调用,这就是片段生命周期的工作原理:

添加Fragment之前调用构造函数,但实例变量_testClass并不总是设置,因为Android在恢复时会调用默认构造函数.我猜你在旋转设备(连续三次?)和/或当你去另一个应用程序然后回来时你的崩溃正在发生

您需要通过持久化使用onSaveInstanceState创建TestClass实例所需的参数(Bundle支持的基本数据类型)来管理它,然后使用它们在onResume中创建TestClass的实例

猜你在找的C#相关文章