Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用应用程序上下文启动Webview时,Webview未打开选择html组件(下拉列表)_Android_Webview - Fatal编程技术网

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

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&

我正在后台加载一个应用程序上下文,这样当活动打开时,我们就不会有加载webview的时间延迟

我有一个非常简单的html文件,加载在webview中,带有选择组件:

<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不再有效。此解决方案会泄漏活动上下文