2015-06-28 4 views
2

В форматах Xamarin обработчик событий OnResume находится в классе Application, который не является NavigationPage, поэтому вы не можете выполнять навигацию в OnResume. Когда мое приложение возобновится, если он спит более 30 минут, я хочу, чтобы он вернулся к своей домашней странице, а не вернулся на страницу, где он спал. У меня есть 30-минутная ловушка в OnResume, но я не могу сделать навигацию. Может ли кто-нибудь предложить способ сделать это?Перейдите на страницу по умолчанию из OnResume()

+0

у вас есть какой-либо код фрагмент кода –

ответ

8

по умолчанию, в приложении Forms вы храните MainPage, который в этом случае должен быть NavigationPage.

public class App : Application 
{ 
    public App() 
    { 
     // The root page of your application 
     MainPage = new NavigationPage { 

Таким образом, вы можете использовать его, чтобы добраться до Navigation объекта.

protected override async void OnResume() 
{ 
    var nav = MainPage.Navigation; 

    // you may want to clear the stack (history) 
    await nav.PopToRootAsync (true); 

    // then open the needed page (I'm guessing a login page) 
    await nav.PushAsync(new LoginPage()); 
} 
+0

Великий, спасибо. Я не понимал, что могу получить доступ к объекту MainPage. Вы продуманно предложили очистить историю стека, однако, когда я пытаюсь это сделать, я получаю синтаксическую ошибку: ElementAt не является методом в NavigationStack. Вы действительно пробовали это? – Ric

+0

вам нужно добавить 'using System.Linq;' Xamarin Studio не всегда помогает с отсутствующей библиотекой Linq, потому что это методы расширения, вероятно, но все еще раздражает ;-) –

3

Попробуйте обновить свой OnResume способ выглядеть следующим образом:

protected async override void OnResume() 
{ 
    await MainPage.Navigation.PopToRootAsync (true); 
} 
+1

Хороший простой ответ. Большое спасибо. Я бы назвал это правильным, но Бенуа попал туда первым. – Ric

+0

это лучше, спасибо, я обновил ответ для справки –