Как правильно расположить страницу WebView в Xamarin.Forms? - PullRequest
0 голосов
/ 11 декабря 2018

Проблема

У меня есть приложение в Xamarin.Forms, которое открывает WebView после экрана входа в систему.

Каждый раз, когда пользователь выходит из системы и снова, новые Page и ViewModelсоздал.

Проверка устройства через удаленные устройства Chrome. Я все еще вижу старые WebViews.

Для навигации я использую пользовательский NavigationService, созданный в приложении Evolve пару лет назад.

То, что я пробовал до сих пор

Удаление Страницы и ее ViewModel при открытии Страницы WebViews.

Это код, который открывает Страницу WebView и возвращает кСтраница входа

публичная асинхронная задача NavigateBackAsync (bool IgnoraNavegacao) {_isNavigating = true;

try
{
    /* Omitted for clarity */

    if (currentPage is IDisposable)
        ((IDisposable)currentPage).Dispose();

    if (!(currentPage.GetType() == _homeViewModel))
    {
        await navigationPage.PopAsync();
    }
}
finally
{
    _isNavigating = false;
}

Утилизировать страницы, где браузер - это мой WebView, определенный в XAML:

public void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}

public virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        Browser = null;

        var bindingContext = BindingContext as IDisposable;
        bindingContext?.Dispose();

        BindingContext = null;
    }
}

И это Dispose ViewModel:

public void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        OnNavigatingCommand = null;
        OnNavigatedCommand = null;
        OnBackButtonPressedCommand = null;
    }
}

И это то, что я вижу в Chrome после входа в систему четыре раза:

Chrome Remote Device

Интересно, что в первый раз это «работает»: после того, как я выйду из системы и войду снова, в Chrome будет виден только один WebView.

Пожалуйста, дайте мне знать, если потребуется какая-либо дополнительная информация.

Будем весьма благодарны за любые указатели в правильном направлении.

1 Ответ

0 голосов
/ 17 декабря 2018

Когда вы переходите на эту страницу второй раз. Если вы не создали веб-просмотр в одноэлементном режиме, вы не получите предыдущее веб-просмотр.

Таким образом, есть два варианта:

One :

Используя режим одиночного просмотра, рядом с этой страницей вы можете получить старое веб-представление.

Two:

Покидая страницу, вы можете установить старый экземпляр WebView равным null.

В OnDisappearing метод:

 protected override void OnDisappearing()
    {
        base.OnDisappearing();
        if (null != webView)
        {
            webView = null;
        }
    }

Или до того, как Navigation.PopAsync() сделает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...