Xamarin 表单:轮播 child 页面未触发消失事件?
Xamarin Forms: Carousel child pages not firing Disappearing event?
我有一个包含 9 children 的轮播页面,并且我在某些 child 页面上实现了跟踪功能。跟踪功能适用于视频、音频和内容。如果用户播放视频、音频或阅读内容,然后用户移动到下一个 child 或返回上一页,我将跟踪所花费的时间。
我在 child 个页面的 OnDisappearing()
添加了跟踪服务。因此,当用户离开页面时,跟踪服务开始触发,并且在 android 平台上运行良好。当我在 ios 平台上测试时,OnDisappearing()
没有触发。
这是一个已知问题吗?我该如何解决这个问题?
事件 OnDisappearing 在 iOS 和 Android 上对我来说都很好。如果问题仍然存在于您的项目中。您可以使用以下解决方法。
在xaml
<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:CarouselPageDemo"
x:Class="CarouselPageDemo.MyCarouselPage"
CurrentPageChanged="CarouselPage_CurrentPageChanged">
在CarouselPage.xaml.cs
int CurrentIndex = 0;
//...
private void CarouselPage_CurrentPageChanged(object sender, EventArgs e)
{
var index = this.Children.IndexOf(this.CurrentPage);
var ind = CurrentIndex.ToString();
if (index != CurrentIndex)
{
MessagingCenter.Send<Object>(this, ind);
}
if (index > -1)
{
CurrentIndex = index;
}
}
在子页面中
public Page1()
{
InitializeComponent();
MessagingCenter.Subscribe<Object>(this, "0", (org) =>
{
// ... handle the logic when the page will disappearing
});
}
注意: 这里的 0 在你的子页面中会有所不同 (0,1,2,...)
更新
public partial class MainPage : CarouselPage
{
int LastIndex=0;
public MainPage()
{
InitializeComponent();
this.Children.Add(new Page1());
this.Children.Add(new Page2());
this.Children.Add(new Page3());
CurrentPage = Children[0];
MessagingCenter.Subscribe<App, string>((App)Xamarin.Forms.Application.Current, "child", (s, child) =>
{
CurrentPage = Children[Int32.Parse(child)];
});
}
private void CarouselPage_CurrentPageChanged(object sender, EventArgs e)
{
var index = this.Children.IndexOf(this.CurrentPage);
string title = this.CurrentPage.Title;
Debug.WriteLine("title:>>" + title);
if (!string.IsNullOrEmpty(title)&& LastIndex!=index)
{
MessagingCenter.Send<MainPage>(this, title);
}
if (index > -1)
{
LastIndex = index;
}
}
}
}
我有一个包含 9 children 的轮播页面,并且我在某些 child 页面上实现了跟踪功能。跟踪功能适用于视频、音频和内容。如果用户播放视频、音频或阅读内容,然后用户移动到下一个 child 或返回上一页,我将跟踪所花费的时间。
我在 child 个页面的 OnDisappearing()
添加了跟踪服务。因此,当用户离开页面时,跟踪服务开始触发,并且在 android 平台上运行良好。当我在 ios 平台上测试时,OnDisappearing()
没有触发。
这是一个已知问题吗?我该如何解决这个问题?
事件 OnDisappearing 在 iOS 和 Android 上对我来说都很好。如果问题仍然存在于您的项目中。您可以使用以下解决方法。
在xaml
<CarouselPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:CarouselPageDemo"
x:Class="CarouselPageDemo.MyCarouselPage"
CurrentPageChanged="CarouselPage_CurrentPageChanged">
在CarouselPage.xaml.cs
int CurrentIndex = 0;
//...
private void CarouselPage_CurrentPageChanged(object sender, EventArgs e)
{
var index = this.Children.IndexOf(this.CurrentPage);
var ind = CurrentIndex.ToString();
if (index != CurrentIndex)
{
MessagingCenter.Send<Object>(this, ind);
}
if (index > -1)
{
CurrentIndex = index;
}
}
在子页面中
public Page1()
{
InitializeComponent();
MessagingCenter.Subscribe<Object>(this, "0", (org) =>
{
// ... handle the logic when the page will disappearing
});
}
注意: 这里的 0 在你的子页面中会有所不同 (0,1,2,...)
更新
public partial class MainPage : CarouselPage
{
int LastIndex=0;
public MainPage()
{
InitializeComponent();
this.Children.Add(new Page1());
this.Children.Add(new Page2());
this.Children.Add(new Page3());
CurrentPage = Children[0];
MessagingCenter.Subscribe<App, string>((App)Xamarin.Forms.Application.Current, "child", (s, child) =>
{
CurrentPage = Children[Int32.Parse(child)];
});
}
private void CarouselPage_CurrentPageChanged(object sender, EventArgs e)
{
var index = this.Children.IndexOf(this.CurrentPage);
string title = this.CurrentPage.Title;
Debug.WriteLine("title:>>" + title);
if (!string.IsNullOrEmpty(title)&& LastIndex!=index)
{
MessagingCenter.Send<MainPage>(this, title);
}
if (index > -1)
{
LastIndex = index;
}
}
}
}