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

Phi*_*ens 7 c# android xamarin.android xamarin

我知道Xamarin Android中的构造函数难度,如下所述: 没有找到构造函数...(System.IntPtr,Android.Runtime.JniHandleOwnership)

以及我在应用程序中创建的所有片段和活动以及其他自定义视图都会导入此构造函数.

但有时null reference exception会抛出一个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;
    }

}
Run Code Online (Sandbox Code Playgroud)

这一段代码抛出一个null reference exceptionOnCreateView,occassionaly.这很少发生,从来没有直接从代码创建视图然后测试它.

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

Sel*_*bor 3

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

片段生命周期图


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

您需要通过保留创建 with 实例所需的参数( 所支持的基本数据类型)来管理,然后使用它们创建in实例BundleTestClassonSaveInstanceStateTestClassonResume