#xamarin #xamarin.forms
#xamarin #xamarin.forms
Вопрос:
Я хотел бы иметь страницу содержимого Xamarin PCL, которая отображает приветственное сообщение, а затем загружает данные из веб-службы. У меня работает веб-служба, но проблема в том, что в следующем примере ничего не отображается, пока для работы требуется время.
Какова общая стратегия для отображения заставки типа ожидания, ожидания завершения длительной задачи, а затем продолжения работы с остальной частью приложения (скажем, со страницей главного меню)?
Надеюсь, стратегия будет работать в проекте PCL, чтобы мне не приходилось пытаться писать версии для iOS и Android? Я пытался поместить код в различные методы переопределения, но, похоже, ничего не работает. Заранее спасибо за любые советы.
// The following is called from the "App : Application" class.
public class SplashScreen : ContentPage
{
public SplashScreen()
{
Label lblWelcome = new Label { Text = "Hello. Please wait..." };
Content = new StackLayout
{
Children = { lblWelcome }
}
//TODO: Have the device display the above content before the following continues...
CallWebServiceToLoadParameters();
//TODO: Move on to display the Main Menu
}
}
Комментарии:
1. перемещение CallWebServiceToLoadParameters(); в onApearing() должно сработать.
2. Что, похоже, не работает? Он зависает, выдает ошибку? Достигает ли он серверной части вообще?
3. вам нужно отделить свой код, например, содержимое от CallWebServiceToLoadParameters(); перемещение его в OnAppearing() может не сработать, потому что, если вы это сделаете — CallWebServiceToLoadParameters() завершится до того, как вы покажете свой экран-заставку. Вы можете попытаться запустить CallWeb из другого потока, а когда он завершится — перейти на новую страницу содержимого. Но я бы рекомендовал в любом случае взглянуть на реализацию собственных всплесков.
4. Привет @GeraldVersluis. Как я уже упоминал в вопросе, вызов веб-службы работает просто отлично. Проблема в том, что во время работы на экране-заставке ничего не отображается. Я начинаю понимать, что в заставке Xamarin (PCL) есть нечто большее, чем я надеялся. Я смотрю на codeworks.it/blog/?p=294 и developer.xamarin.com/Guides/Android/User_Interface /…
5. Привет @Yogesh. Я попробовал трюк с OnAppearing(), но он не сработал.
Ответ №1:
Это может помочь:
public class SplashScreen : ContentPage
{
public SplashScreen()
{
Label lblWelcome = new Label { Text = "Hello. Please wait..." };
Content = new StackLayout
{
Children = { lblWelcome }
}
Device.BeginInvokeOnMainThread(async () => {
//If awaitable
var response = await CallWebServiceToLoadParameters();
if(response{
App.Current.MainPage = //Your main page.
}
});
}
}
Немного уродливый, правильный путь будет с ViewModel для каждой страницы.