Webview 在使用应用程序上下文启动时未打开选择 HTML 组件(下拉列表)



我正在使用应用程序上下文,在后台加载WebView,因此当活动打开时,我们不会有时间延迟加载WebView。

我有一个非常简单的html文件,加载在WebView中,并带有SELECT组件:

<select>
  <option value="name1">value1</option>
  <option value="name2">value2</option>
  <option value="name3">value3</option>
</select>

我在背景中启动WebView,并使用应用程序上下文

WebView webView = new WebView(getApplicationContext());
webView.setJavaScriptEnabled(true);
webview.loadUrl("https://www.google.com");

准备就绪后将其打开:

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在活动中打开,但是,选择的组件不会打开警报,以从下拉列表中挑选。原因是 - 警报仅适用于活动上下文。

这是我到目前为止尝试的:

  1. 试图更新视图的上下文是不可能的。
  2. 无法应对视图 -
  3. 使用另一项活动启动WebView,并将其传递给我当前的活动 -
  4. 尝试调用无效,重新加载 - 不起作用。
  5. 活动: WebView webView = new WebView(this);的intreate()中的init webview,但它需要时间才能加载,这不是我的意图。
  6. 我正在以编程方式加载WebView,而不是使用XML布局进行加载 - 这不是这里的问题。
  7. 我已经看到了此解决方案:https://stackoverflow.com/a/28030088/5130239,它也不起作用。

我想强调,这是一个排序的解决方案:不要在背景中加载网络浏览量,所以请,请不要建议它,我正在寻找对于适合我要求的东西。

事实证明,将上下文设置为应用程序上下文时,WebView(或任何其他UI组件)无效。

不起作用:

WebView webView = new WebView(getApplicationContext());

作品:

WebView webView = new WebView(CUURENT_ACTIVITY);

使用MutabLeContextWrapper时,我们不想使用CURENT_ACTIVITY,该问题解决了问题(使用应用程序上下文启动WebView,并且当活动打开时,我们正在使用活动上下文更新上下文)。

internalContext类:

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时,我们正在使用mutableContext:

WebView webView = new WebView(InternalContext.getInstance().getMutableContext());

当新活动开始时,我们需要更新基本上下文:

InternalContext.getInstance().setBaseContext(CURRENT_ACTIVITY);

相关内容

  • 没有找到相关文章

最新更新