是否可以在实例化后更改WebView的上下文?

cri*_*lus 10 android webview

我有一个WebView我正在加载一个活动,以便它预先加载,以便它立即弹出一个不同的Activity(从第一个启动).

问题是,为了实例化a WebView,我必须传入a Context,在这种情况下,它是上面提到的第一个.

所以它很好用,第二个Activity显示WebView就好了.问题是,如果我单击<select>下拉列表WebView,其选择器对话框将显示在WebView下.感觉就像选择根本不起作用,直到您点击后退按钮并在返回父活动之前短暂地看到选择对话框.

似乎当我WebView在第二个活动中附加到布局时,它的模态会附加到该活动的窗口,但它WebView本身附加到父活动的窗口,因此它显示在层次结构中的更高点.

我怎么可能改变ContextWebView它的初始化以后?

这是一个非常难以解决的问题 - 我必须在活动开始之前创建WebView,但我还需要选择对话框才能工作.

如果有人能在这里给我一些见解,我会非常感激.

这是针对SDK项目的,因此我无法访问父活动.此外,saveState无法正常工作,因为其中显示的大部分内容都是WebView由JavaScript生成的,并且完整的DOM堆栈不会传输.

rup*_*pps 13

您可以尝试使用MutableContextWrapper创建WebView :

MutableContextWrapper mMutableContext=new MutableContextWrapper(context);
WebView mWebView=new WebView(mMutableContext);
Run Code Online (Sandbox Code Playgroud)

以后你可以做

mMutableContext.setBaseContext(newcontext);
Run Code Online (Sandbox Code Playgroud)

但......

  • WebView是一个非常复杂的组件,可能会使用传递的上下文来创建其他对象,如Handler.WebView可能会使用这些处理程序将内容发布到原始UI线程,所以最后你可能会有一个带有混合上下文的View,你知道,双内存泄漏(如果它能正常工作)

  • Webview跨越至少1个线程"webcore",这是动作发生的地方,也是与原始UI线程与...处理程序的持续通信?通过原始背景?谁知道!

  • 甚至有2种不同的webview引擎:Kitkat是基于铬的,而果冻豆和以前的版本使用AOSP/WebView.所以你有一个额外的突破点.

  • 你说的原因不够强大.WebView并不那么慢.如果您加载的应用是,请尝试优化它.您可以为此做很多事情,例如从内部资产加载HTML和图形.