在我们的mvvm应用程序中,我们使用的是mvxdialogfragments。在Android 4.4下一切正常,但完全相同的代码不适用于版本5棒棒糖。没有错误,没有例外等,他们只是没有出现:(
Dialog是从包含这些行的片段启动的:
var myDialog = new CalendarPickerView(){ViewModel = new CalendarPickerViewModel(){CurrentMonth = ViewModel.Day}};
myDialog.Show(Activity.SupportFragmentManager, "Date Selector");
这发生在对话框create-method:
中public override Dialog OnCreateDialog(Bundle savedState)
{
_singleLock = true;
ViewModel = MyViewModel;
EnsureBindingContextSet(savedState);
View view = this.BindingInflate(Resource.Layout.CalendarPickerView, null);
var myDialog = new Dialog(Activity, Resource.Style.CustomDialog);
myDialog.SetContentView(view);
MyViewModel.CurrentDate = DateTime.Now.Date;
var leftButton = view.FindViewById<ImageView>(Resource.Id.btn_left);
leftButton.Click += (sender, args) => MyViewModel.MonthBack();
var rightButton = view.FindViewById<ImageView>(Resource.Id.btn_right);
rightButton.Click += (sender, args) => MyViewModel.MonthForward();
cal = view.FindViewById<GridView>(Resource.Id.calendarGrid);
adapt = new CalendarAdapter(Activity);
cal.ItemClick += cal_ItemClick;
adapt.ViewModel = MyViewModel;
MyViewModel.PropertyChanged += MyViewModel_PropertyChanged;
cal.Adapter = adapt;
var saveBtn = view.FindViewById<LinearLayout>(Resource.Id.area_Save);
saveBtn.Click += ((s, a) =>
{
_singleLock = false;
Activity.RequestedOrientation = ScreenOrientation.Sensor;
Dismiss();
});
var abortBtn = view.FindViewById<LinearLayout>(Resource.Id.area_Cancel);
abortBtn.Click += ((s, a) =>
{
_singleLock = false;
Activity.RequestedOrientation = ScreenOrientation.Sensor;
Dismiss();
});
myDialog.SetCancelable(false);
myDialog.SetCanceledOnTouchOutside(false);
return myDialog;
}
如果我使用DialogFragment代替MvxDialogFragment作为CalendarPickerView的基类并删除create-method中所有与mvvm相关的代码,那么一切正常......
奇怪的是,在调试CalendarPickerView时,片段列在FragmentManager.Fragments下,但Dialog.IsShowing为false。 mvvm和xamarin都是28.11.2014最新的稳定版本。是否有其他人遇到过这个问题,或者你知道我们能做些什么吗?
提前感谢!
答案 0 :(得分:1)
我遇到了同样的问题,对我来说,问题不是使用MvvmCross或MvxDialogFragment。在我原来的以及单独的测试项目中,我发现了以下问题的原因:
似乎 - 我知道这听起来很荒谬 - 覆盖DialogFragment的OnStart()方法,即使只包含base.OnStart()调用的主体也会阻止对话框出现。看看你是在DialogFragment中还是在继承层次结构中的某个地方使用OnStart()。
顺便说一句,我想这不一定与Android 5 / Lollipop有关,但它与ART运行时有关。一旦我开始使用不使用ART运行时的Android 5设备,我会尝试确认这一点。我已在此处上传了示例项目,可用于重现该问题: