Невозможно ввести поле ввода после загрузки страницы с загрузкой InAppBrowser и spinner

У меня очень интересная проблема. Я использую inAppBrowser и spinner в одном из моих приложений для Android. Spinner реализован с помощью ProgressDialog . Проблема здесь в том, что когда я пытаюсь открыть веб-страницу через inAppBrowser, и загрузка spinner начинает загрузку после начала загрузки страницы, а затем закрывается после того, как она закончит загрузку страницы, когда я нажимаю на поле ввода этой страницы и пытаюсь Типа букв или цифр, он просто остается в так называемом «заблокированном» состоянии. Если я набираю что-то, что я не вижу их, курсор просто мигает.

Чтобы сделать это еще более странным, я могу набирать специальные символы. Если я коснусь другого места вокруг страницы, то снова нажмите на это же поле ввода, затем оно будет работать. Другой случай, когда он работает, – это когда я помещаю приложение в состояние Pause, а затем возобновляю его, поля ввода работают.

Эта проблема возникает только на платформах Android версии 5.0.1 и старше.

Java-файл inAppBrowser можно найти в Github в java-файле InAppBrowser .

Моя реализация spinner следующая:

 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(""); 

И я показываю / скрываю счетчик следующим образом:

 @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(); } 

Что может быть проблемой здесь? Любые советы, предложения будут оценены.

Solutions Collecting From Web of "Невозможно ввести поле ввода после загрузки страницы с загрузкой InAppBrowser и spinner"

Теперь я смог решить проблему. Проблема была в центре внимания этой области ввода страницы. По какой-то причине он не сосредоточился на себе после завершения загрузки страницы.

Попытка исправить проблему в файле inAppBrowser.java inAppBrowser.java с помощью 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();"}); }); 

Что делает этот код, так это то, что он сначала очистит фокус от этого конкретного элемента, а затем снова сосредоточится на этом же элементе.

Это превратилось в работу на любой платформе независимо от версии, которая является большой вещью.