使用InAppBrowser和微调器加载加载页面后,无法输入输入字段

Ami*_* Al 10 java android spinner cordova inappbrowser

我有一个非常有趣的问题.我在我的一个Android应用程序中使用inAppBrowser和spinner.Spinner实现了ProgressDialog.这里的问题是,当我尝试通过inAppBrowser打开一个网页时,加载微调器开始加载一旦页面开始加载,然后一旦它完成加载页面就关闭,当我点击该页面的输入字段并尝试键入字母或数字,它只是停留在所谓的"锁定"状态.如果我输入的东西我看不到它们,光标就会一直闪烁.

为了使这更奇怪,我能够输入特殊字符.如果我点击页面周围的任何其他位置,然后再次点击相同的输入字段,然后它可以工作.它工作的另一种情况是当我将应用程序置于Pause状态然后恢复它时,输入字段起作用.

仅在5.0.1及更早版本的Android平台中会出现此问题.

可以在InAppBrowser java文件的 Github中找到inAppBrowser java文件.

我的微调器实现如下:

spinner = new ProgressDialog(cordova.getActivity());
spinner.setIndeterminate(false);
spinner.setProgressStyle(ProgressDialog.STYLE_SPINNER);
spinner.setCancelable(false);
spinner.setMessage(cordova.getActivity().getText(R.string.spinner_loading));
spinner.setTitle("");
Run Code Online (Sandbox Code Playgroud)

我用以下方式显示/隐藏一个微调器:

@Override
public void onPageStarted(WebView view, String url,  Bitmap favicon) {
    super.onPageStarted(view, url, favicon);
    //InAppBrowser default code....

    try {
        JSONObject obj = new JSONObject();
        obj.put("type", LOAD_START_EVENT);
        obj.put("url", newloc);

        sendUpdate(obj, true);

    } catch (JSONException ex) {
        Log.d(LOG_TAG, "Should never happen");
    }

    spinner.show();
}

public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    try {
        JSONObject obj = new JSONObject();
        obj.put("type", LOAD_STOP_EVENT);
        obj.put("url", url);

        sendUpdate(obj, true);

    } catch (JSONException ex) {
         Log.d(LOG_TAG, "Should never happen");
    }

    spinner.hide();
}
Run Code Online (Sandbox Code Playgroud)

这可能是什么问题?任何提示,建议将不胜感激.

Ami*_* Al 5

现在我能够解决问题.问题是该特定页面输入字段的焦点.由于某种原因,一旦页面加载完成后它就没有关注自己.

尝试inAppBrowser.java通过使用来解决inAppBrowser 文件中的问题editText.clearFocus(),然后editText.requestFocus()根本没有帮助.但对我有用的是解决方案.

由于inAppBrowser有一个调用的方法executeScript(),我能够将一些Javascript代码注入到具有此问题的特定输入字段.因此下面的代码做了诀窍:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank',  location=yes');
ref.addEventListener('loadstop', function() {
    ref.executeScript({code: "$('#element').blur(); $('#element').focus();"});
});
Run Code Online (Sandbox Code Playgroud)

该代码的作用是首先清除该特定元素的焦点,然后再次关注该元素.

无论版本多么重要,这都适用于任何平台.