Xamarin 从3.5.1更新到MvvmCross 4.2.2后,膨胀Mvx.MvxLinearLayout时出错

Xamarin 从3.5.1更新到MvvmCross 4.2.2后,膨胀Mvx.MvxLinearLayout时出错,xamarin,xamarin.android,mvvmcross,Xamarin,Xamarin.android,Mvvmcross,我刚刚将我的项目从MvvmCross 3.5.1稳定更新为4.2.2。在修复了更新后弹出的一些其他运行时异常之后,我一直坚持这一点 我正在一个MvxFragment中膨胀布局: _rootView = this.BindingInflate(Resource.Layout.my_layout, null); 这会为Mvx.MvxLinearLayout抛出Java.Lang.ClassNotFoundException。随信附上: 二进制XML文件行#1:膨胀类Mvx.MvxLinearLa

我刚刚将我的项目从MvvmCross 3.5.1稳定更新为4.2.2。在修复了更新后弹出的一些其他运行时异常之后,我一直坚持这一点

我正在一个
MvxFragment
中膨胀布局:

_rootView = this.BindingInflate(Resource.Layout.my_layout, null);
这会为
Mvx.MvxLinearLayout
抛出
Java.Lang.ClassNotFoundException
。随信附上:

  • 二进制XML文件行#1:膨胀类Mvx.MvxLinearLayout时出错
  • 在路径:DexPathList[[zip file\”/data/app/com.myapp上未找到类“Mvx.MvxLinearLayout\”
我已经安装了MvvmCross.Binding nuget包

I以下基本活动(在第3.5.1节中效果良好):

MvxActionBarActivity
//
///对本机ActionBarActivity的Mvx支持
/// 
公共抽象类MvxActionBarActivity
:MvxActionBarEventSourceActivity
,IMvxAndroidView
{
受保护的MvxActionBarActivity()
{
BindingContext=新的MvxAndroidBindingContext(this,this);
this.AddEventListeners();
}
公共对象数据上下文
{
获取{return BindingContext.DataContext;}
设置{BindingContext.DataContext=value;}
}
公共IMvxViewModel视图模型
{
获取{返回DataContext作为IMvxViewModel;}
设置
{
数据上下文=值;
OnViewModelSet();
}
}
public void mvxinternalstartivityforresult(Intent-Intent,int-requestCode)
{
base.StartActivityForResult(意图、请求代码);
}
公共IMvxBindingContext{get;set;}
公共覆盖无效SetContentView(int layoutResId)
{
var view=this.BindingInflate(layoutResId,null);
SetContentView(视图);
}
受保护的虚拟void OnViewModelSet()
{
}
MVX动作BareventSourceActivity
公共类MvxActionBarEventSourceActivity:AppCompativeActivity
,IMvxEventSourceActivity
{
创建时受保护的覆盖无效(捆绑包)
{
CreateWillBeCalled.Raise(这个,bundle);
base.OnCreate(bundle);
CreateCalled.Raise(这个,bundle);
}
受保护的覆盖无效OnDestroy()
{
2.提出(这个);
base.ondestory();
}
受保护的覆盖无效Wintent(意图)
{
基恩温特(意图);
NewIntentCalled.Raise(这个,intent);
}
受保护的覆盖void OnResume()
{
base.OnResume();
2.提高(这个);
}
受保护的覆盖void OnPause()
{
暂停。升起(这个);
base.OnPause();
}
受保护的覆盖void OnStart()
{
base.OnStart();
开始呼叫。升起(这个);
}
受保护的重写void OnRestart()
{
base.OnRestart();
重新调用。提升(此);
}
受保护的覆盖void OnStop()
{
停止呼叫。升起(这个);
base.OnStop();
}
public override void StartActivityForResult(Intent-Intent,int-requestCode)
{
StartActivityForResultCalled.Raise(这是新的MvxStartActivityForResultParameters(intent,requestCode));
base.StartActivityForResult(意图、请求代码);
}
受保护的覆盖void OnActivityResult(int请求代码、结果代码、意图数据)
{
Raise(这是新的MVXAActivityResultParameters(请求代码、结果代码、数据));
base.OnActivityResult(请求代码、结果代码、数据);
}
受保护的覆盖无效OnSaveInstanceState(包超出状态)
{
SaveInstanceStateCalled.Raise(this,outState);
base.OnSaveInstanceState(超出状态);
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
废弃的。升起(这个);
}
基地。处置(处置);
}
已处理公共事件处理程序;
将调用公共事件事件处理程序CreateWillBeCalled;
已调用公共事件EventHandler;
调用公共事件EventHandler;
公共事件事件处理程序NewIntentCalled;
调用公共事件事件处理程序;
公共事件处理程序暂停调用;
公共事件事件处理程序启动调用;
重新调用公共事件事件处理程序;
已调用公共事件EventHandler;
已调用公共事件事件处理程序SaveInstanceState;
公共事件事件处理程序StartActivityForResultCalled;
公共事件事件处理程序ActivityResultCalled;
}

将我的基本活动切换到
MvxAppCompatActivity
解决了这个问题。

你的活动覆盖了哪个类?就像sJy说的活动可能是个问题。我只希望你的项目中也引用了MvvmCross.Binding.Droid包?就在你提到MvvmCross.Binding包之后。你能使用吗MvxLinearLayout是否在代码中显示为未知?@sJy我更新了我的问题。是的,我使用的是MvvmCross.Binding.Droid,我可以在代码中创建MvxLinearLayout。是的,MVXAppCompativity不适用于3.5.1:)
/// <summary>
/// Mvx support for the native ActionBarActivity
/// </summary>
public abstract class MvxActionBarActivity
    : MvxActionBarEventSourceActivity
        , IMvxAndroidView
{
    protected MvxActionBarActivity()
    {
        BindingContext = new MvxAndroidBindingContext(this, this);
        this.AddEventListeners();
    }

    public object DataContext
    {
        get { return BindingContext.DataContext; }
        set { BindingContext.DataContext = value; }
    }

    public IMvxViewModel ViewModel
    {
        get { return DataContext as IMvxViewModel; }
        set
        {
            DataContext = value;
            OnViewModelSet();
        }
    }

    public void MvxInternalStartActivityForResult(Intent intent, int requestCode)
    {
        base.StartActivityForResult(intent, requestCode);
    }

    public IMvxBindingContext BindingContext { get; set; }

    public override void SetContentView(int layoutResId)
    {
        var view = this.BindingInflate(layoutResId, null);
        SetContentView(view);
    }

    protected virtual void OnViewModelSet()
    {
    }
public class MvxActionBarEventSourceActivity : AppCompatActivity
    , IMvxEventSourceActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        CreateWillBeCalled.Raise(this, bundle);
        base.OnCreate(bundle);
        CreateCalled.Raise(this, bundle);
    }

    protected override void OnDestroy()
    {
        DestroyCalled.Raise(this);
        base.OnDestroy();
    }

    protected override void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);
        NewIntentCalled.Raise(this, intent);
    }

    protected override void OnResume()
    {
        base.OnResume();
        ResumeCalled.Raise(this);
    }

    protected override void OnPause()
    {
        PauseCalled.Raise(this);
        base.OnPause();
    }

    protected override void OnStart()
    {
        base.OnStart();
        StartCalled.Raise(this);
    }

    protected override void OnRestart()
    {
        base.OnRestart();
        RestartCalled.Raise(this);
    }

    protected override void OnStop()
    {
        StopCalled.Raise(this);
        base.OnStop();
    }

    public override void StartActivityForResult(Intent intent, int requestCode)
    {
        StartActivityForResultCalled.Raise(this, new MvxStartActivityForResultParameters(intent, requestCode));
        base.StartActivityForResult(intent, requestCode);
    }

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        ActivityResultCalled.Raise(this, new MvxActivityResultParameters(requestCode, resultCode, data));
        base.OnActivityResult(requestCode, resultCode, data);
    }

    protected override void OnSaveInstanceState(Bundle outState)
    {
        SaveInstanceStateCalled.Raise(this, outState);
        base.OnSaveInstanceState(outState);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            DisposeCalled.Raise(this);
        }
        base.Dispose(disposing);
    }

    public event EventHandler DisposeCalled;
    public event EventHandler<MvxValueEventArgs<Bundle>> CreateWillBeCalled;
    public event EventHandler<MvxValueEventArgs<Bundle>> CreateCalled;
    public event EventHandler DestroyCalled;
    public event EventHandler<MvxValueEventArgs<Intent>> NewIntentCalled;
    public event EventHandler ResumeCalled;
    public event EventHandler PauseCalled;
    public event EventHandler StartCalled;
    public event EventHandler RestartCalled;
    public event EventHandler StopCalled;
    public event EventHandler<MvxValueEventArgs<Bundle>> SaveInstanceStateCalled;
    public event EventHandler<MvxValueEventArgs<MvxStartActivityForResultParameters>> StartActivityForResultCalled;
    public event EventHandler<MvxValueEventArgs<MvxActivityResultParameters>> ActivityResultCalled;
}