Impossible de saisir le champ de saisie après avoir chargé une page avec InAppBrowser et le chargement de la filière

J'ai un problème très intéressant. J'utilise inAppBrowser et spinner dans l'une de mes applications Android. Spinner est implémenté avec ProgressDialog . Le problème ici est que lorsque j'essaie d'ouvrir une page Web à travers InAppBrowser et que le moteur de chargement commence à charger une fois que la page commence à charger, puis fermez une fois qu'il a fini de charger la page, lorsque je tape sur le champ de saisie de cette page et que je tente Tapez des lettres ou des chiffres, il reste dans cet état appelé «verrouillé». Si je tape quelque chose, je ne peux pas les voir, le curseur reste clignotant.

Pour rendre cela encore plus étrange, je peux taper des caractères spéciaux. Si je tape sur n'importe quel autre endroit autour de la page, puis tapez à nouveau sur ce même champ de saisie, alors cela fonctionne. Un autre cas lorsque cela fonctionne est lorsque je place l'application dans l'état de pause et que je la reprends, les champs de saisie fonctionnent.

  • Taille maximale de la base de données SQLite en mémoire d'une application Android?
  • Android Studio Gradle: erreur: échec d'exécution pour la tâche ': application: processDebugGoogleServices'. > Aucun client correspondant n'a été trouvé pour le paquet
  • Impossible de résoudre l'erreur de superclasse lors du référencement de la bibliothèque .jar
  • Comment bloquer le clavier virtuel tout en cliquant sur edittext dans Android?
  • Inclure Ruboto-Core avec l'application Android lors de l'installation
  • Comment supprimer le rembourrage du titre dans la barre d'outils?
  • Ce problème se produit uniquement dans les plates-formes Android de la version 5.0.1 et anciennes.

    Le fichier java InAppBrowser se trouve dans Github au fichier java InAppBrowser .

    Ma mise en page de spinner suit:

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

    Et je montre / cache un spinner de la manière suivante:

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

    Quel pourrait être le problème ici? Tous les conseils, suggestions seront appréciés.

  • Une explication plus approfondie des procstats pour Android
  • CollapsingToolbarLayout ne reconnaît pas le défilement
  • RecyclerView ViewPager java.lang.NullPointerException android.support.v7.widget.RecyclerView $ ItemAnimator $ ItemHolderInfo.left
  • Comment définir et déclencher mon propre softirq dans le noyau linux?
  • Code source Google Play Services
  • Modification du texte d'une autre activité
  • One Solution collect form web for “Impossible de saisir le champ de saisie après avoir chargé une page avec InAppBrowser et le chargement de la filière”

    Maintenant, j'ai pu régler le problème. Le problème était l'objet de ce champ de saisie de page spécifique. Pour une raison quelconque, il ne s'est pas concentré sur lui-même une fois la page terminée de chargement.

    En essayant de résoudre le problème dans le fichier inAppBrowser.java d' inAppBrowser.java en utilisant editText.clearFocus() , puis editText.requestFocus() n'a pas aidé du tout. Mais ce qui a fonctionné pour moi, c'est la suite de la solution.

    Puisque inAppBrowser a une méthode appelée executeScript() , j'ai pu injecter un code Javascript dans ce champ de saisie spécifique qui avait ce problème. Ainsi, le code suivant a été le tour:

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

    Ce que fait ce code, c'est qu'il va d'abord effacer l'objectif de cet élément spécifique, puis se concentrer sur ce même élément à nouveau.

    Cela a tourné à travailler sur n'importe quelle plate-forme quelle que soit la version qui est grand chose.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.