gpt4 book ai didi

c# - Xamarin.Forms 中的导航

转载 作者:太空狗 更新时间:2023-10-29 21:32:26 25 4
gpt4 key购买 nike

我有两个页面,分别是第 1 页和第 2 页。在第 1 页中,我有一个 ListView 和一个图像按钮(点击手势)。在这里,如果我单击 listview 项目,它会导航到 Page2,其中它播放一首歌。

Navigation.PushModalAsync(new page2(parameter1));

歌曲继续播放。然后我通过单击后退按钮返回到 page1。然后如前所述,我在 page1 中有一个图像按钮,如果我单击此图像按钮,我想转到之前显示的同一页面(page2),并继续播放相同的状态歌曲(它不应该从头开始播放)。

我明白,如果我点击后退按钮,它会破坏模型页面。出于某种原因,我无法使用 pushasync()。这可能吗?

最佳答案

建议不要将您的音频/媒体播放器逻辑与您的导航逻辑或页面对象紧密耦合 - 特别是如果您希望它继续在后台播放。

最简单的方法 是拥有一个订阅 MessengingCenter 的 AudioPlayerService 类对于音频播放器命令——例如播放、暂停等。当播放命令被发布时,它可以启动后台线程来播放音频文件。

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 引入一个接口(interface),使用适当的方法来播放、暂停等并使用 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>");

关于c# - Xamarin.Forms 中的导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43473270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com