Xamarin.Android应用程序通过快捷方式恢复 - 在将MasterDetailPage添加到容器之前必须设置Master和Detail

时间:2017-06-29 13:35:05

标签: c# android xamarin xamarin.android prism

我有使用Prism的Xamarin.Android todo列表移动应用程序。

问题是:

  • 在android系统中,我可以创建快捷方式来打开特定列表 应用程序。
  • 当我打开应用程序,然后按主页按钮时,它仍保留在后台 (没关系)
  • 当我从桌面快捷方式运行应用程序时,它会打开 android活动,当我创建新的PrismApplication( <?php get_header(); get_template_part('index', 'banner'); ?> <!-- Blog Full Width Section --> <div class="blog-section"> <div class="container"> <div class="row"> <!--Blog Area--> <div class="<?php elitepress_post_layout_class(); ?>" > <?php get_template_part('content',''); ?> <?php comments_template('',true); ?> </div> <!--/Blog Area--> <div class="preloader" style="display: block;"> <div class="cssload-loader" style="display: block;"> <div class="cssload-side"></div> <div class="cssload-side"></div> <div class="cssload-side"></div> <div class="cssload-side"></div> <div class="cssload-side"></div> <div class="cssload-side"></div> <div class="cssload-side"></div> <div class="cssload-side"></div> </div> </div> <?php get_sidebar(); ?> </div> </div> </div> <?php get_footer(); ?> <!-- /Blog Full Width Section -->)一切正常,但之后 为视图创建viewmodel,app仍在使用旧的viewmodel 之前。

我做了这个workaroud并使用了相同的PrismApplication实例:

LoadApplication(new App());

现在,问题是重定向。这段代码:

static App xamApp;

protected override void OnCreate(Bundle bundle)
{
    if (xamApp == null)
    {
        Forms.Init(this, bundle);
        xamApp = new App();
    }

    LoadApplication(xamApp);
    xamApp.Redirect(Intent.GetStringExtra("ListID"));
}

导致错误:

public void Redirect(string listId) { NavigationService.NavigateAsync($"MainPage/MainNavigationPage/TodoList?id={listId}", animated: false); }

Prism应该通过&#34; TodoList&#34;来处理MasterDetailPage中的细节绑定。来自NavigateAsync uri。

enyone知道这里可能出现什么问题吗?

2 个答案:

答案 0 :(得分:1)

所以我终于开始工作了。

  • 首先我在MainActivity的ActivityAttribute中使用了LaunchMode = LaunchMode.SingleTask

    [活动(标签=&#34; ..&#34;, LaunchMode = LaunchMode.SingleTask ,图标=&#34; @ drawable / icon&#34;,主题=&# 34; @ style / MainTheme&#34;,MainLauncher = true]

    公共类MainActivity:FormsAppCompatActivity

  • 然后我使用了 FormsAppCompatActivity OnNewIntent 方法,所以在app登录后,只启动此事件:

protected override void OnNewIntent(Intent intent)
{
    var listId = intent.GetStringExtra("ListID");
    ((App)App.Current).Redirect(listId);
}
  • 现在即使$"MainNavigationPage/TodoList?id={listId}"仍在工作

答案 1 :(得分:0)

根据您提供的信息,我假设当应用程序再次启动时,它已经在运行,您之前的MasterDetail页面已经在堆栈中。在重置方法中,您希望将导航堆栈重置为传递参数的新URI。在这种情况下,你应该使用绝对uri。这意味着尝试在您的uri中添加“/”前缀。所以像这样:

public void Redirect(string listId)
{
    NavigationService.NavigateAsync($"/MainPage/MainNavigationPage/TodoList?id={listId}", animated: false);
}