2016-07-06 7 views
0

Xamarinフォームが新しくなりました。 Androidでは、ViewPagerを使用してイメージを読み込み、ユーザーがページをスワイプしました。 Androidにはアダプタがあるため、すべてのビューは一度に初期化されません。今私はXamarinフォームに移動し、Carousel Pageがあることを確認したいと思います。それはViewPagerが必要に応じてページをロードするのと同じように動作しますか?Xamarin:カルーセルページは、すべてのページを1つに読み込みますか?

答えて

1

Xamarin.FormsCarouselPageは、UI仮想化(リサイクル)をサポートしていません。

ページ/子供の数によっては、初期化のパフォーマンスとメモリ使用量が問題になることがあります。

新しい使用するVisualElement好ましい基本的にCarouselPageを取って代わりCarouselViewあり、それは各プラットフォーム用に最適化されています。

ブログ:Xamarin.Forms CarouselView

Nuget:Xamarin.Forms.CarouselView(現在はプレリリース中)

FYI:私はAndroidのレンダラ(CarouselViewRenderer.cs)用のソースを見て、それが実際にRecyclerViewを実装ん。..

0

ページのコンストラクタで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"); 
     } 
} 
関連する問題