Xamarin 从3.5.1更新到MvvmCross 4.2.2后,膨胀Mvx.MvxLinearLayout时出错
我刚刚将我的项目从MvvmCross 3.5.1稳定更新为4.2.2。在修复了更新后弹出的一些其他运行时异常之后,我一直坚持这一点 我正在一个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
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\”
//
///对本机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;
}