Не удается разрешить текущую верхнюю активность при отображении модели представления с помощью mvvmcross

Я реализую собственный презентатор в своем приложении Mvvmcross. Что я хотел сделать, так это: обычную навигацию и навигацию по фрагментам.

В моей основной деятельности мне удалось встроить несколько представлений фрагментов на основе этого примера: https://github.com/i486dx400/MultiRegionPresenter

в то время как фрагменты работают, я также хотел показать обычные действия, которые не размещены как фрагмент. Поэтому я расширил этот презентер, как показано в этом фрагменте: https://gist.github.com/JelleDamen/7003702< /а>

Проблема/ошибка: когда я показываю это второе действие, оно отображается. Но когда я возвращаюсь к предыдущему представлению (которое является хостом) и снова открываю ту же активность, она не отображается. Выходной журнал говорит: «mvx: Предупреждение: не удается разрешить текущую верхнюю активность»

Что я делаю неправильно или что я должен сделать, чтобы сообщить фреймворку, какая активность является текущей основной активностью?

Заранее спасибо!


person Jelle    schedule 16.10.2013    source источник


Ответы (1)


Что происходит не так?

Предоставленная вами линия трассировки показана из:

    protected virtual void Show(Intent intent)
    {
        var activity = Activity;
        if (activity == null)
        {
            MvxTrace.Warning("Cannot Resolve current top activity");
            return;
        }
        activity.StartActivity(intent);
    }

в https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxAndroidViewPresenter.cs

Таким образом, может показаться, что при вызове Show текущая активность MvvmCross не отображается.

... и просмотрев https://github.com/i486dx400/MultiRegionPresenter/blob/master/RegionEx.Droid/MainActivity.cs похоже, что это правда — основное действие в приложении не адаптировано для MvvmCross, а является просто нормальная активность фрагмента.

что должно сделать приложение, чтобы сообщить фреймворку, какая активность является текущей основной активностью?

MvvmCross обычно отслеживает «основную активность», перехватывая события жизненного цикла активности, в частности события создания, запуска, перезапуска, возобновления и уничтожения активности. Они показаны на схеме жизненного цикла на странице http://developer.android.com/reference/android/app/Activity.html

МввмКросс:

Все встроенные типы активности 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/efficient-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 — затем реализуйте что-то, что соответствует вашим потребностям в навигации.

person Stuart    schedule 16.10.2013
comment
Спасибо Стюарт! Моя основная активность действительно была обычной фрагментарной активностью. И приложение запускается каждый раз, когда я меняю это действие, что нежелательно. Посмотрю предложенные вами ссылки, спасибо. - person Jelle; 16.10.2013