我正在Mvvmcross应用程序中实现自定义演示者。我想要实现的是:常规导航和片段导航。
在我的主要活动中,我设法根据此示例嵌入了几个片段视图:https://github.com/i486dx400/MultiRegionPresenter
当片段正在工作时,我还想展示不作为片段托管的常规活动。因此,我扩展了此演示文稿,如以下代码段所示:https://gist.github.com/JelleDamen/7003702
问题/错误: 当我展示第二个活动时,它会显示出来。但是当我回到上一个视图(主机)并再次重新打开相同的活动时,它不会显示出来。输出日志显示:“mvx:警告:无法解析当前的顶级活动”
我做错了什么,或者我该怎么做,告知框架当前最重要的活动是什么活动?
提前致谢!
答案 0 :(得分:2)
出了什么问题?
您提供的跟踪线显示在:
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,而只是一个正常的FragmentActivity。
应用程序应该做什么来告知框架当前最重要的活动是什么活动?
MvvmCross通常通过拦截活动生命周期事件来跟踪“顶级活动” - 特别是活动创建,启动,重新启动,恢复和销毁事件。这些内容显示在http://developer.android.com/reference/android/app/Activity.html
的生命周期图中MvvmCross:
所有内置的MvvmCross Activity类型 - MvxActivity,MvxFragmentActivity等 - 都会“自动”调用它们。这些适应性可以使用ActionBarSherlock with latest MVVMCross中描述的步骤扩展到其他活动类型,或者如果您喜欢,您的应用可以手动调用其中一些钩子。
个人意见:我认为你最好不要过于密切关注https://github.com/i486dx400/MultiRegionPresenter。每次创建MainActivity时,https://github.com/i486dx400/MultiRegionPresenter/blob/master/RegionEx.Droid/MainActivity.cs中的OnCreate
中的代码似乎都会尝试Start
该应用 - 当然,这可能会在每个应用的生命周期中多次发生。
相反,请阅读该示例以及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等其他示例 - 然后实施适合您导航需求的内容。