2017-04-18 116 views
6

我有两页说Page1和page2。 In Page-1我有一个列表视图和图像按钮(点击手势)。 这里,如果我点击listview项目,它将导航到Page2,其中 播放歌曲。导航在Xamarin.Forms

Navigation.PushModalAsync(new page2(parameter1)); 

歌曲继续播放。然后我通过点击返回按钮回到page1。然后如上所述,我在第一页有一个图像按钮,如果我点击这个图像按钮,我想用同样的状态歌曲继续播放(它不应该从头开始播放),前面显示的同一页(第2页)。

据我所知,如果我点击后退按钮,它会销毁模型页面。出于某种原因,我不能使用pushasync()。 这可能吗?

+0

当关闭网页时保存回歌曲和它的位置,在页面中出现的事件设置位置 – Krishna

+0

首先什么来铭记是有这个页面作为单,并通过作为参数传递给'PushModalAsync() ',不是每次都创建它 – Alex

+0

我认为这是可能的,你可以获得歌曲的暂停状态并使用MessagingCenter将其保存在ViewModel中,当页面启动时,您应该能够从VM中检索数据并播放从它被暂停的地方发出的歌曲。 – Dilmah

回答

4

建议不要将音频/媒体播放器逻辑与导航逻辑或页面对象紧密结合在一起 - 尤其是当您希望它在后台继续播放时。

简单的方法将有赞同MessengingCenter的音频播放器命令的AudioPlayerService类 - 如播放,暂停等。当播放命令发布后,它可以启动一个后台线程来播放音频文件。

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

现在,当你从第1页第2页到导航,你可以发布/通过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 
} 

而且,使用下面的代码来控制你的音频播放器服务在你的页面/视图模型对象。

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

我想知道在这种情况下是否可以使用[MVVM light](https://mvvmlight.codeplex.com) – mbob

2

您可以尝试通过全局或局部变量,无论是适当的同一个实例:

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

希望它能帮助。

+0

我知道这one..but你不觉得,歌曲将从头开始播放.. –

+0

@uncle_scrooge这是一个正确的答案,根本就没有开始播放歌曲的'OnAppearing'事件,检查如果歌曲已经在播放如果它不是重新开始。如果你想要真正的帮助,请添加你的代码。 – Gusman

+0

我问这个问题的意图是,一旦我们回去,是否有一种方法可以隐藏页面,就像我们对控件(可见性)所做的一样,因为模态页面会被破坏。 –

相关问题