从3.5.1

时间:2016-08-08 00:06:43

标签: xamarin xamarin.android mvvmcross

我刚刚将我的项目从MvvmCross 3.5.1 stable更新为4.2.2。在修复了更新后弹出的一些其他运行时异常后,我坚持使用这个异常。

我在MvxFragment

中为布局充气
_rootView = this.BindingInflate(Resource.Layout.my_layout, null);

这会为Java.Lang.ClassNotFoundException引发Mvx.MvxLinearLayout。随着消息:

  • 二进制XML文件行#1:错误类膨胀类Mvx.MvxLinearLayout
  • 在路径上找不到类\“Mvx.MvxLinearLayout \”:DexPathList [[zip file \“/ data / app / com.myapp ...

我已经安装了MvvmCross.Binding nuget包。

我有以下基础活动(在3.5.1上工作正常):

MvxActionBarActivity

/// <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()
    {
    }

MvxActionBarEventSourceActivity

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;
}

1 个答案:

答案 0 :(得分:0)

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