簡體   English   中英

在Xamarin.Forms中導航

[英]Navigation in Xamarin.Forms

我有兩頁說Page1和page2。 在Page-1中,我有一個列表視圖和一個圖像按鈕(點擊手勢)。 在這里,如果我點擊listview項目,它會導航到播放歌曲的Page2。

Navigation.PushModalAsync(new page2(parameter1));

宋繼續發揮。 然后我點擊后退按鈕返回第1頁。 然后如上所述,我在第1頁有一個圖像按鈕,如果我點擊這個圖像按鈕,我想要前面顯示的同一頁面(第2頁)繼續播放相同的狀態歌曲(它不應該從頭開始播放)。

據我所知,如果單擊后退按鈕,它會破壞模型頁面。 出於某種原因,我不能使用pushasync()。 這可能嗎?

建議不要將音頻/媒體播放器邏輯與導航邏輯或Page對象緊密耦合 - 特別是如果您希望它繼續在后台播放。

最簡單的方法是讓一個AudioPlayerService類訂閱MessengingCenter以獲取音頻播放器命令 - 例如播放,暫停等。當發布播放命令時,它可以啟動后台線程來播放音頻文件。

MessagingCenter.Subscribe<Page2, AudioPlayerArgs> (this, "Play", (sender, args) => {
      // initiate thread to play song
});

現在,當您從page1導航到page2時,您可以通過MessengingCenter向AudioPlayerService類發布/發送命令以開始播放歌曲。 這樣,page1或page2之間的任意數量的來回都不會影響音頻播放器,因為如果它已經播放相同的音頻文件,它可以忽略播放命令。

MessagingCenter.Send<Page2, AudioPlayerArgs> (this, "Play", new AudioPlayerArgs("<sound file path>"));

注意:我個人避免在我的代碼中使用MessengingCenter - 更好的方法是為IAudioPlayerService引入一個接口,使用適當的方法來播放,暫停等,並使用DependencyService將AudioPlayerService狀態維護為全局對象(這是默認行為)

public interface IAudioPlayerService {
     bool PlayAudio(string file);
     bool PauseAudio();
     bool StopAudio();
}

[assembly: Xamarin.Forms.Dependency (typeof (IAudioPlayerService))]
public class AudioPlayerService : IAudioPlayerService {
      //implement your methods
}

並使用以下代碼控制Page / ViewModel對象中的音頻播放器服務。

DependencyService.Get<IAudioPlayerService>().Play("<sound file path>");

您可以嘗試傳遞全局變量或局部變量的相同實例,無論適當的是什么:

var secondpage = new page2(parameter1); // Global scope.
...
Navigation.PushModalAsync(secondpage);

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM