Xamarin:轮播页面是否将所有页面加载到一个页面

时间:2016-07-06 22:36:02

标签: xamarin xamarin.forms carousel

我是新的Xamarin形式。在Android上,我使用ViewPager加载图像,用户在页面上滑动。由于Android具有适配器,因此不会立即初始化所有视图。现在我想转到Xamarin表格并看到有Carousel Page。它是否与ViewPager的行为相同,只根据需要加载页面?

2 个答案:

答案 0 :(得分:1)

Xamarin.Forms CarouselPage不支持UI虚拟化(回收)。

初始化性能和内存使用量可能是一个问题,具体取决于页面/子项的数量。

要使用的首选VisualElement是基本取代CarouselView的{​​{1}},并且已针对每个平台进行了优化。

博客:Xamarin.Forms CarouselView

Nuget:Xamarin.Forms.CarouselView(目前处于预发布状态)

仅供参考:我刚刚查看了Android渲染器(CarouselPage)的来源,它确实实现了CarouselViewRenderer.cs ...

答案 1 :(得分:1)

如果阻止在页面的构造函数中调用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");
        }
}