Как правильно использовать индикатор активности на Xamarin.forms для Android?

Я использую этот плагин, чтобы показать, что приложение занято, но на 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 все работает нормально.

Как мне правильно им пользоваться?


person Hikari    schedule 24.02.2018    source источник


Ответы (2)


В настоящий момент у меня нет устройства / симулятора Android для тестирования, и я не могу воспроизвести его на UWP, но ваш вызов службы выполняется асинхронно в основном потоке, ваш ActivityIndicator не должен блокироваться, если вы выполняете вызов службы в рабочий поток.

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

Индикатор активности должен быть привязан (isVisibleProperty и isRunningProperty) к свойству bool в вашей ViewModel, и ваша ViewModel должна реализовывать

INotifyPropertyChanged

Здесь - прекрасное объяснение того, как этого добиться.

Если наложение необходимо в этом answer, вы узнаете, как этого добиться.

person Ingenator    schedule 25.02.2018