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

我知道Xamarin Android的构造函数的难度,正如这里所解释的:没有为...找到构造函数(System.IntPtr,Android.Runtime.JniHandleOwnership)

并在应用中创建的所有片段&活动&其他自定义视图导入此构造函数。

但有时在OnCreateView方法中引发null reference exception 。 例:

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抛出一个null reference exception 。 这种情况很少发生,从不直接从代码创建视图并进行测试。

现在显然,这个代码中唯一可以引发异常的点就是_testClass变量。 所以现在显然我的问题是,在OncreateView javaReference构造函数时, javaReference方法是否也被执行?


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

片段生命周期图


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

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

链接地址: http://www.djcxy.com/p/38175.html

上一篇: Will Xamarin Android execute OnCreateView when the IntPtr constructor is called?

下一篇: Make sure spring component is stateless