web-dev-qa-db-ja.com

ナビゲーションスタックをクリアするにはどうすればよいですか?

アプリのナビゲーションに問題があります。私はxamarin.formsを使用して、ナビゲーションスタックをクリーンアップできます。ポップとプッシュを使用しません。完全なナビゲーションスタックを表示できますか?

15
Ibrahim

Xamarin.Formsの最新バージョンでは、次を使用してナビゲーションスタックを確認できます

Navigation.NavigationStack

したがって、あなたは

var existingPages = Navigation.NavigationStack.ToList();
foreach(var page in existingPages)
{
    Navigation.RemovePage(page);
}

このコードは、ナビゲーションページまたはINavigationを実装する何かの背後にあるコードに挿入する必要があります。

詳細情報 Xamarin.Forms.INavigation Members

39
user1

これは、スタックを空にして指定したページに移動するために作成した関数です。 (ユースケースは、使用中にアプリが非アクティブ化され、ユーザーを追い出す必要がある場合でした)

    public async Task PopAllTo(ViewModel vm)
    {
        if (vm == null) return;
        Page page = PreparePage(vm); //replace 'page' with the page you want to reset to
        if (page == null) return;
        _navigation.InsertPageBefore(page, _navigation.NavigationStack.First());
        await _navigation.PopToRootAsync();
    }
8
James Wierzba

あなたはこれを試すことができます...

    public void ResetNavigationStack()
    {
        if (_navigation != null && _navigation.NavigationStack.Count() > 0)
        {
            var existingPages = _navigation.NavigationStack.ToList();
            foreach (var page in existingPages)
            {
                _navigation.RemovePage(page);
            }
        }
    }

そしてブーム!!!そのナビゲーションスタックはクリアされたブラザです!

または、モーダルスタックをリセットする場合

    public async Task<Page> PopAllModals()
    {
        Page root = null;

        if (_navigation.ModalStack.Count() == 0)
            return null;

        for (var i = 0; i <= _navigation.ModalStack.Count(); i++)
        {
            root = await _navigation.PopModalAsync(false);
        }
        return root;
    }

そしてブーム!それらのモーダルはなくなった!

5
Egli Becerra