2017-06-29 17 views
0

我有使用Prism的Xamarin.Android待辦事項列表移動應用程序。Xamarin.Android應用程序通過快捷方式的意圖繼續 - Master和Detail必須在將MasterDetailPage添加到容器之前設置

的問題是:

  • 在android系統,我可以創建快捷方式 應用打開特定列表。
  • 當我打開應用程序,並按下home鍵,它仍然在後臺 (那OK)
  • 當我再運行從桌面快捷方式的應用程序,它會打開 Android的活動,當我創造新的PrismApplication( LoadApplication(new App());)一切運行正常,但在創建viewmodel進行查看後, 之後,應用程序仍然使用之前的 之前的舊viewmodel。

我做了這個workaroud我用PrismApplication的同一個實例:

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); 
} 

導致錯誤:

System.InvalidOperationException: Master and Detail must be set before adding MasterDetailPage to a container.

棱鏡應該由NavigateAsync URI的 「TodoList的」 綁定在MasterDetailPage詳細的照顧。

enyone知道這裏可能是什麼問題嗎?

回答

1

所以我終於得到它的工作。

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

    [活性(標籤= 「..」,LaunchMode = LaunchMode。SingleTask,圖標= 「@繪製/圖標」,主題= 「@風格/ MainTheme」,MainLauncher =真]

    公共類MainActivity:FormsAppCompatActivity

  • 然後我用的方法OnNewIntentFormsAppCompatActivity所以以後的應用程序是對研究背景,僅此事件被推出:

protected override void OnNewIntent(Intent intent) 
{ 
    var listId = intent.GetStringExtra("ListID"); 
    ((App)App.Current).Redirect(listId); 
}
  • 現在甚至$"MainNavigationPage/TodoList?id={listId}"作品
0

根據您提供的信息,我假設當應用程序再次啓動時,它已經在運行,您之前的MasterDetail頁面已經在堆棧中。在您的重置方法中,您希望將導航堆棧重置爲傳遞參數的新uri。在這種情況下,你應該使用絕對的uri。這意味着嘗試爲你的uri添加一個「/」前綴。所以像這樣:

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

是的,應用程序已經在後臺運行(只有在應用程序已經運行時纔出現問題)。我試過這個絕對的URI,結果是一樣的。問題是我使用的是默認的LaunchMode,所以也許創建了新的應用程序實例,但是以某種方式使用舊的PrismApplication,即使在我創建新的時候:'LoadApplication(new App());'。我對android開發很陌生,所以我不太確定這是怎麼發生的。 –

相關問題