【发布时间】:2019-05-12 21:09:34
【问题描述】:
问题
我在 Xamarin.Forms 中有一个应用程序,它在登录屏幕后打开一个 WebView。
每次用户注销并再次登录时,都会创建一个新的 Page 和 ViewModel。
通过 Chrome 的远程设备检查设备我仍然可以看到旧的 WebView。
对于导航,我使用了一个受几年前 Evolve 应用启发的自定义 NavigationService。
到目前为止我已经尝试过什么
在弹出 WebView 的页面时同时处理页面和它的 ViewModel。
这是弹出WebView的Page并返回Login Page的代码
公共异步任务 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;
}
Page 的 Dispose,其中 Browser 是我在 XAML 中定义的 WebView:
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;
}
}
这是 ViewModel 的 Dispose:
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
OnNavigatingCommand = null;
OnNavigatedCommand = null;
OnBackButtonPressedCommand = null;
}
}
这是我登录四次后在 Chrome 上看到的内容:
有趣的是,它第一次“工作”时:在我注销并再次登录后,Chrome 上只能看到一个 WebView。
如果需要更多信息,请告诉我。
任何指向正确方向的指针将不胜感激。
【问题讨论】:
-
第一次工作意味着登录和退出成功?后三个没有成功登录和退出。只有看到的webview是服务器地址?离开webview时如果向服务器发送退出请求操作。
-
@JuniorJiang-MSFT 所有登录和注销都成功。 “第一次工作”是指我第一次登录和再次退出时,Chrome 上只显示一个 Webview。
-
如果第一个网页视图已经显示,您可以尝试
webView.Reload();下次。 -
@JuniorJiang-MSFT 作为导航到 WebView 页面的过程的结果,一个新的 Page 和 ViewModel 被安装,所以我没有重用 WebView 的实例。因此问题是:我如何摆脱旧的?
-
好的,我提供一个答案,你可以参考一下。
标签: c# android mvvm webview xamarin.forms