Не удается разрешить текущую верхнюю активность при отображении модели представления с помощью mvvmcross
В моем приложении Mvvmcross я внедряю собственного докладчика. То, что я хотел сделать, это: обычная навигация и навигация по фрагментам.
В моей основной деятельности мне удалось внедрить несколько представлений фрагментов на основе этого примера: https://github.com/i486dx400/MultiRegionPresenter
пока фрагменты работают, я также хотел показать регулярные действия, которые не размещаются как фрагмент. Для этого я расширил этот докладчик, как показано в следующем фрагменте: https://gist.github.com/JelleDamen/7003702
Проблема / ошибка: Когда я показываю это второе действие, оно показывается. Но когда я возвращаюсь к предыдущему представлению (которое является хостом) и снова открываю ту же активность, она не отображается. В выходном журнале написано: "mvx: Предупреждение: не удается разрешить текущую верхнюю активность"
Что я делаю неправильно или что я должен делать, чтобы сообщить структуре, какой вид деятельности является текущим основным видом деятельности?
Заранее спасибо!
1 ответ
Что не так?
Предоставленная вами линия трассировки показана с:
protected virtual void Show(Intent intent)
{
var activity = Activity;
if (activity == null)
{
MvxTrace.Warning("Cannot Resolve current top activity");
return;
}
activity.StartActivity(intent);
}
Таким образом, может показаться, что при вызове Show текущая активность MvvmCross не отображается.
... и, глядя на https://github.com/i486dx400/MultiRegionPresenter/blob/master/RegionEx.Droid/MainActivity.cs, кажется, это действительно так - основное действие в приложении не адаптировано для MvvmCross, но вместо этого просто нормальная FragmentActivity.
что должно сделать приложение, чтобы сообщить платформе, какой вид деятельности является текущим основным видом деятельности?
MvvmCross обычно отслеживает "верхнюю активность", перехватывая события жизненного цикла действия - в частности, события создания, запуска, перезапуска, возобновления и уничтожения событий. Они показаны на диаграмме жизненного цикла в http://developer.android.com/reference/android/app/Activity.html
MvvmCross:
- подключается к этим событиям через MvxActivityAdapter в https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxActivityAdapter.cs
- эти ловушки вызывают методы расширения в https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxActivityViewExtensions.cs
- эти методы расширения информируют монитор жизненного цикла об изменениях жизненного цикла - см. https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxAndroidLifeTimeMonitor.cs#L35 -
Все встроенные типы действий MvvmCross - MvxActivity, MvxFragmentActivity и т. Д. - вызывают их "автоматически". Эти адаптации могут быть расширены на другие типы действий с помощью шагов, подобных тем, которые описаны в ActionBarSherlock с последней версией MVVMCross, или ваше приложение может вручную вызывать некоторые из этих ловушек, если предпочитает.
Личное мнение: я думаю, что вам лучше не следовать https://github.com/i486dx400/MultiRegionPresenter слишком близко. Код в OnCreate
в https://github.com/i486dx400/MultiRegionPresenter/blob/master/RegionEx.Droid/MainActivity.cs кажется, пытается Start
приложение каждый раз, когда создается MainActivity, что, конечно, может происходить несколько раз в течение жизненного цикла каждого приложения.
Вместо этого прочитайте этот образец и другие, например http://motzcod.es/post/60427389481/effective-navigation-in-xamarin-android-part-1, https://github.com/jamesmontemagno/Xam.NavDrawer/tree/master/Mvx и http://enginecore.blogspot.ro/2013/06/more-dynamic-android-fragments-with.html - затем реализуйте то, что соответствует вашим потребностям в навигации.