2016-07-14 9 views
0

データが表示されていないときに読み込み画面を作成したいのですが、動作していないのに永久に読み込みを続けます。私はそれが読み込まれたときに読み込みを停止したい。Xamarin.forms Loading Screen

これは私のコード

 if (Clublistview.ItemsSource == null) 
     { 
      try 
      { 
       base.OnAppearing(); 
       await setClubs(Clublistview); 

       overlay.IsVisible = false; 
       Clublistview.IsVisible = true; 
      } 
      catch (Exception ex) 
      { 
       //MessagingCenter 
       await DisplayAlert("Error", 
        "There seems to be an error, please check your internet connection.", 
        "OK"); 
      } 
     } 
     else 
     { 
      overlay.IsVisible = true; 
      Clublistview.IsVisible = false; 
     } 

ですこれは、このコードは、あなたのContentPageOnAppearing方法に置かれているように見えますのXmaIコード

<ListView x:Name="Clublistview" HasUnevenRows="true" ItemSelected="OnItemSelected" ItemsSource="{Binding Id}" IsVisible="true"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <ViewCell Height="55"> 
          <StackLayout BackgroundColor="White" 
          Orientation="Vertical"> 
           <StackLayout Orientation="Horizontal" Padding="2,2,2,2"> 
            <Image Source="{Binding Logo}" IsVisible="true" WidthRequest="50" HeightRequest="50"/> 

            <StackLayout Orientation="Vertical"> 
             <Label Text="{Binding Name}" FontSize="20" x:Name="BtnClub" 
             TextColor="Black" /> 

             <Label HorizontalOptions="Start" Text="Select for more info" FontSize="10"/> 
             <!--<Button BackgroundColor="White" TextColor="Black" HorizontalOptions="Start" x:Name="btnInfo" 
             Text="Select for more info" FontSize="10" Clicked="OnInfoClicked" CommandParameter="{Binding Id}"/>--> 
            </StackLayout> 
           </StackLayout> 
          </StackLayout> 
         </ViewCell> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
      <ContentView x:Name="overlay" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" AbsoluteLayout.LayoutFlags="All" IsVisible="false"> 
       <ActivityIndicator IsRunning="True" IsVisible="True" Color="Black" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand"/> 
       </ContentView> 
+0

XAMLコードを追加してください。 –

+0

こんにちは私はxamlコードを追加しました –

+0

'Clublistview.ItemsSource'がヌルでないとローダーが表示されています - 私にとっては奇妙です。デバッグ時に 'try'ブロックに' overlay.IsVisible = false; 'という行が表示されますか? –

答えて

2

です。そうであれば、ページが表示されるので1回だけ呼び出されます。 Clublistview.ItemsSourceがnullでないと仮定すると、このコードが実行されます:

overlay.IsVisible = true; 
Clublistview.IsVisible = false; 

これは、あなたのオーバーレイが表示されているとActivityIndicatorが回転されることを意味します。これはOnAppearingではない場合、私はあなたがそれをしているメソッドを呼び出しているとき、わからない

あなたが代わりにこのような何かをする場合があります。

public override async void OnAppearing() 
{ 
    base.OnAppearing(); 

    // Show your overlay 
    overlay.IsVisible = true; 
    Clublistview.IsVisible = false; 

    // Load the items into the ItemsSource 
    await setClubs(Clublistview); 

    // Hide the overlay 
    overlay.IsVisible = false; 
    Clublistview.IsVisible = true; 
} 

あなたがにこの種の動作を実現することができますMVVMパターンでよりクリーンな方法。 MVVMを使用すると、プロパティーバインディングを使用して、オーバーレイが表示されるタイミングを制御できます。 hereを開始するのに役立つMVVMとXamarin.Formsに関するガイドがあります。 Hereも例を示すブログ記事です。

+0

こんにちは、説明のおかげで男!できます! –