#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. Задержка?