Индикатор загрузки пользовательского каталога Xamarin.forms Acr не отображается

#c# #xamarin #xamarin.forms

#c# #xamarin #xamarin.forms

Вопрос:

У меня есть приложение xamarin forms.В моем приложении у меня есть кнопка, которая вызывает определенный веб-api и показывает всплывающие окна (плагин Rg.popUp) в соответствии с моей логикой. Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь реализовать индикатор активности Acr.Userdialog, когда пользователь нажимает кнопку. Я намереваюсь, когда пользователь нажимает кнопку, должен появиться индикатор, и вызовы API должны выполняться в фоновом режиме, пока не появятся всплывающие окна.

Что я сделал

 namespace sampleapp
{
    public partial class MainPage : ContentPage
    {
        string truequescount;
        MobileListData mobileListData = new MobileListData();
        StateListData stateListData = new StateListData();
        UserMappedStateListData userMappedStateListData = new UserMappedStateListData();
        public MainPage()
        {
            InitializeComponent();               
            LoadScreenItems();          
        }

        private async void submit_clicked(object sender, EventArgs args)
        {                 
            if (StateListData.Entry[0].State.Contains(State_picker.Text))
            {
                UserDialogs.Instance.ShowLoading("submitting data...");               
                try
                {                      
                    //My API Calls                         
                    if (transactions[0].Questions.Count < 5)
                    {   
                        // navigation 1 according to condition  
                        UserDialogs.Instance.HideLoading();                    
                        await PopupNavigation.PushAsync(new NoDataPopUp());
                    }
                    else
                    {
                        //some logic                        
                        if (ObjQuestionData.Count < 1)
                        {    
                            //navigation 2 according to condition
                            UserDialogs.Instance.HideLoading();                      
                            await PopupNavigation.PushAsync(new InsuffQdata());
                        }
                        else
                        {
                            //some logic
                        }                      
                    }
                    // Orginal navigation if all conditions surpassed
                    UserDialogs.Instance.HideLoading();
                    await Navigation.PushAsync(new SecurityQuestionScreen(tranzaction, formdata));                        
                } 
                catch (Exception) 
                {                   
                }        
            }
            else
            {
                // another navigation according to condition
                UserDialogs.Instance.HideLoading();
                await PopupNavigation.PushAsync(new FormVerificationPopup(formdata));
            }
        }
    }
}
  

Согласно моему индикатору загрузки кода, он отображается только после появления всплывающего окна.Любая помощь приветствуется.

Редактировать

Я попытался загрузить это в основной поток, и это сработало нормально. Но теперь он работает только в Android 9.0. Он не отображается ни на каких устройствах под управлением Android 9. В чем причина?

Комментарии:

1. Вы пытались запустить MainThread или UIThread?

2. Просто отладьте исходный код и посмотрите, соответствует ли выражение «StateListData. Запись [0]. Состояние. Содержит(State_picker. Текст)» возвращает true.

3. @yanng ты … Да, братан, api, и все работает нормально… Я просто не могу показать этот индикатор.. Если я запущу его в основном потоке, будет ли он работать?

4. Можете ли вы поставить задачу ожидания. Задержка (200) выше показывает загрузку и повторите попытку

5. @AditKothari братан, это сработало, когда я запустил его в основном потоке … я обновил свой вопрос .. вы можете мне помочь?

Ответ №1:

  Device.BeginInvokeOnMainThread(async () => {

                try
                {
                using (this.Dialogs.Loading("Loading..."))
                {
                        await Task.Delay(300);
                        //Your Service code
                }
              }
  catch (Exception ex)
        {
                var val=ex.Message;
            UserDialogs.Instance.Alert("Test", val.ToString(), "Ok");
        }
    });
  

Комментарии:

1. Братан, решит ли это проблему отсутствия отображения в Android 8.0 и ниже?

2. однажды у меня это сработало… вы проверьте и дайте мне знать .. помогло это вам или нет.

3. есть ли какая-либо разница между пользовательскими каталогами. Экземпляр. showLoading(«отправка данных …»); и использование (this. Диалоги. Загрузка («Загрузка …»))

4. Никакой разницы .. я просто вызываю это. Диалоги. Загрузка («Загрузка …») из базового класса.

Ответ №2:

Можете ли вы попробовать эту задачу ожидания.Задержка (200); Пользовательские диалоги.Экземпляр.showLoading(«отправка данных …»);

Комментарии:

1. Хорошо, дай мне проверить, братан

2. Добавление ожидающей задачи. Задержка (200) также работает для моего случая. Не могли бы вы объяснить, как это работает, и рекомендуется ли использовать Task. Задержка?