如何正确使用适用于Android的Xamarin.forms上的活动指示器?

时间:2018-02-24 07:50:08

标签: c# android xamarin.forms freeze activity-indicator

我正在使用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上一切正常。

我如何正确使用它?

2 个答案:

答案 0 :(得分:1)

我目前没有Android设备/模拟器进行测试且无法在UWP上重现,但您的服务调用正在主线程上异步执行,如果您的ActivityIndi​​cator不会被阻止,您在工作线程中执行服务调用。

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

答案 1 :(得分:0)

活动指示器必须绑定(isVisibleProperty和isRunningProperty)到ViewModel上的bool属性,并且您的ViewModel必须实现

  

INotifyPropertyChanged的

Here是如何实现这一点的重要解释。

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