我如何才能正确使用 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();
}
这是结果:
如您所见,加载指示器在几秒钟后冻结。
如果我使用默认的 ActivityIndicator,此行为是相同的。
在 IOS 上一切正常。
如何正确使用?
我目前没有 Android device/simulator 进行测试,无法在 UWP 上重现,但您的服务调用是在主线程上异步执行的,您的 ActivityIndicator 应该如果您在工作线程中执行服务调用,则不会被阻止。
// 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 中需要叠加层,您可以了解如何实现。
我正在使用 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();
}
这是结果:
如您所见,加载指示器在几秒钟后冻结。
如果我使用默认的 ActivityIndicator,此行为是相同的。
在 IOS 上一切正常。
如何正确使用?
我目前没有 Android device/simulator 进行测试,无法在 UWP 上重现,但您的服务调用是在主线程上异步执行的,您的 ActivityIndicator 应该如果您在工作线程中执行服务调用,则不会被阻止。
// 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 中需要叠加层,您可以了解如何实现。