Android 使用应用程序上下文启动Webview时,Webview未打开选择html组件(下拉列表)
我正在后台加载一个应用程序上下文,这样当活动打开时,我们就不会有加载webview的时间延迟 我有一个非常简单的html文件,加载在webview中,带有选择组件:Android 使用应用程序上下文启动Webview时,Webview未打开选择html组件(下拉列表),android,webview,Android,Webview,我正在后台加载一个应用程序上下文,这样当活动打开时,我们就不会有加载webview的时间延迟 我有一个非常简单的html文件,加载在webview中,带有选择组件: <select> <option value="name1">value1</option> <option value="name2">value2</option> <option value="name3">value3</option&
<select>
<option value="name1">value1</option>
<option value="name2">value2</option>
<option value="name3">value3</option>
</select>
准备好后,在活动中打开:
LinearLayout root = new LinearLayout(this);
root.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
root.setOrientation(LinearLayout.VERTICAL);
root.addView(webView);
setContentView(root);
webview将在“活动”中打开,但“选择组件”不会打开警报,以便从下拉列表中进行拾取。
原因是-警报仅适用于活动上下文
以下是我迄今为止所做的尝试:
无法尝试更新视图的上下文。
应对一种观点——不可能。
用另一个活动启动webview,并将其传递给我的当前活动——效果也不好。
尝试调用invalidate,reload-无效。
在onCreate活动中初始化WebView:WebView WebView=new WebViewthis;这是可行的,但是webview的加载需要时间,这不是我的初衷。
事实上,我是以编程方式加载WebView,而不是用xml布局设置它——这不是这里的问题。
我已经看到了这个解决方案:,它也不起作用。
我想强调的是,这样的解决方案:不要在后台加载webview对我来说是不可能的,所以请不要建议,我正在寻找符合我要求的东西 将上下文设置为应用程序上下文时,WebView或任何其他ui组件都不起作用 不起作用:
WebView webView = new WebView(getApplicationContext());
作品:
WebView webView = new WebView(CUURENT_ACTIVITY);
我们不希望在使用时使用CURENT_活动,这解决了使用应用程序上下文在WebView中的问题,并且当活动打开时,我们正在使用活动上下文更新上下文
内部上下文类:
class InternalContext {
private static InternalContext instance;
private MutableContextWrapper mutableContext;
protected static InternalContext getInstance() {
if (instance == null) {
instance = new InternalContext();
}
return instance;
}
protected void setBaseContext(Context context) {
mutableContext.setBaseContext(context.getApplicationContext());
}
protected MutableContextWrapper getMutableContext() {
return mutableContext;
}
}
启动webview时,我们使用的是可变上下文:
WebView webView = new WebView(InternalContext.getInstance().getMutableContext());
当新活动启动时,我们需要更新基本上下文:
InternalContext.getInstance().setBaseContext(CURRENT_ACTIVITY);
将上下文设置为应用程序上下文时,WebView或任何其他ui组件都不起作用 不起作用:
WebView webView = new WebView(getApplicationContext());
作品:
WebView webView = new WebView(CUURENT_ACTIVITY);
我们不希望在使用时使用CURENT_活动,这解决了使用应用程序上下文在WebView中的问题,并且当活动打开时,我们正在使用活动上下文更新上下文
内部上下文类:
class InternalContext {
private static InternalContext instance;
private MutableContextWrapper mutableContext;
protected static InternalContext getInstance() {
if (instance == null) {
instance = new InternalContext();
}
return instance;
}
protected void setBaseContext(Context context) {
mutableContext.setBaseContext(context.getApplicationContext());
}
protected MutableContextWrapper getMutableContext() {
return mutableContext;
}
}
启动webview时,我们使用的是可变上下文:
WebView webView = new WebView(InternalContext.getInstance().getMutableContext());
当新活动启动时,我们需要更新基本上下文:
InternalContext.getInstance().setBaseContext(CURRENT_ACTIVITY);
我也有同样的问题,这是一个解决方案。另一个解决方案是,我在活动的xml文件上创建了WebView。在这种情况下,这不起作用,因为我想在切换活动时在后台加载WebView,因此xml不再有效。此解决方案泄漏活动上下文我也有同样的问题,这是一个解决方案。另一个解决方案是,我对活动的xml文件进行了WebView。在本例中,这不起作用,因为我想在切换活动时在后台加载WebView,因此xml不再有效。此解决方案会泄漏活动上下文