我如何才能正确使用 Xamarin.forms 上的 activity 指示器用于 Android?

How can I use correctly the activity indicator on Xamarin.forms for Android?

我正在使用 this 插件来显示应用正忙,但在 Android 上动画总是卡住。

例如我在这段代码中使用它:

private async Task SelectWorkOrderItemAsync(WorkOrderLista WoLista) {
    if (WoLista == null) return;

    // show the loading
    Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Loading..");

    // get datas from DB
    WorkOrderDettaglio WoDett = await _WorkOrderService.GetDettaglioWorkOrder(WoLista.Guid_servizio);

    // this code opens another page with the datas extracted above
    await NavigationService.NavigateToAsync<DettaglioWoViewModel>(WoDett, Costanti.TipoPush.Normale, WoDett.NumWoAnno);

    // hide the loading
    Acr.UserDialogs.UserDialogs.Instance.HideLoading();
}

这是结果:

如您所见,加载指示器在几秒钟后冻结。

如果我使用默认的 ActivityIndi​​cator,此行为是相同的。

在 IOS 上一切正常。

如何正确使用?

我目前没有 Android device/simulator 进行测试,无法在 UWP 上重现,但您的服务调用是在主线程上异步执行的,您的 ActivityIndi​​cator 应该如果您在工作线程中执行服务调用,则不会被阻止。

// get datas from DB
WorkOrderDettaglio WoDett = null;
await Task.Run(async () => WoDett = await _WorkOrderService.GetDettaglioWorkOrder(WoLista.Guid_servizio));

activity 指示器必须绑定(isVisibleProperty 和 isRunningProperty)到您的 ViewModel 上的布尔值 属性,并且您的 ViewModel 必须实现

INotifyPropertyChanged

Here 很好地解释了如何实现这一目标。

如果在此 answer 中需要叠加层,您可以了解如何实现。