【发布时间】:2016-07-06 22:36:01
【问题描述】:
我是 Xamarin 形式的新手。在 Android 上,我使用 ViewPager 加载图像,然后用户在页面上滑动。由于 Android 有适配器,所有视图都不会一次初始化。现在我想转到 Xamarin 表单并看到轮播页面。它的行为是否与 ViewPager 仅根据需要加载页面相同?
【问题讨论】:
标签: xamarin xamarin.forms carousel
我是 Xamarin 形式的新手。在 Android 上,我使用 ViewPager 加载图像,然后用户在页面上滑动。由于 Android 有适配器,所有视图都不会一次初始化。现在我想转到 Xamarin 表单并看到轮播页面。它的行为是否与 ViewPager 仅根据需要加载页面相同?
【问题讨论】:
标签: xamarin xamarin.forms carousel
Xamarin.FormsCarouselPage 不支持 UI 虚拟化(回收)。
初始化性能和内存使用可能会成为问题,具体取决于页面/子项的数量。
新首选的VisualElement 是CarouselView,它基本上取代了CarouselPage,并且已针对每个平台进行了优化。
Nuget:Xamarin.Forms.CarouselView(目前处于预发布阶段)
仅供参考:我刚刚查看了 Android 渲染器 (CarouselViewRenderer.cs) 的源代码,它确实实现了 RecyclerView...
【讨论】:
如果您在页面的构造函数中阻止对 InitializeComponent 的调用,您可能会对加载时间产生影响。
public interface CarouselChildPage {
void childAppearing();
void childDissapearing();
}
public partial class MainPage : CarouselPage {
CarouselPageChild previousPage;
protected override void OnCurrentPageChanged() {
base.OnCurrentPageChanged();
if (previousPage != null)
previousPage.childDissapearing();
int index = Children.IndexOf(CurrentPage);
CarouselPageChild childPage = Children[index] as CarouselPageChild;
childPage.childAppearing();
previousPage = childPage;
}
}
public partial class FriendsListPage : ContentPage, CarouselPageChild {
bool isLoaded = false;
public FriendsListPage() {
// Remove Initialise Component Here
}
public void childAppearing() {
Logger.log("My Appearing");
if (!isLoaded){
InitializeComponent();
isLoaded = true;
}
}
public void childDissapearing() {
Logger.log("My Disappearing");
}
}
【讨论】: