2014-06-20 1 views
0

Dans mon application mono-activité, j'ai un ViewPager qui a un PagerTabStrip. Disons que j'ai deux onglets et deux fragments correspondants. Sur le fragment un (Frag1) j'ai une vue EditText et sur le fragment deux (Frag2), il y a seulement une listview sans texte éditable (juste une liste de CheckedTextViews). Lorsque l'application démarre, Frag1 est visible et le focus est sur l'EditText et, par conséquent, le clavier logiciel apparaît. Pas encore de problème. Cependant, lorsque je glisse vers l'autre onglet et que Frag2 se glisse dans la vue et que Frag1 n'est plus visible, le clavier reste affiché même s'il n'y a rien sur l'écran visible (Frag2) à éditer. Même si je vérifie l'un des CheckedTextViews de Frag2, le clavier reste.EditText supprime la vue visible, mais le clavier reste

Par programme, comment puis-je vérifier de manière robuste et dynamique ce type de situation et masquer le clavier?

Répondre

0

Vous pouvez masquer le clavier sur l'événement de balayage. Mettez dans votre méthode tabselected ou tout ce que vous utilisez pour passer des fragments:

EditText myEditText = (EditText) findViewById(R.id.myEditText); 
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

Hope this helps! : D

+1

Cela fonctionne et je vais l'utiliser pour l'instant. Merci! Cependant, j'espérais le rendre plus _generic_ de mes fragments particuliers. Je vérifie si je suis sur Frag2, puis je cache le clavier. Idéalement, chaque fois que je faisais défiler vers ** n'importe quel fragment, je voudrais vérifier s'il y a un widget qui pourrait nécessiter un clavier et - si c'est le cas - mettre le focus sur ce widget et faire apparaître le clavier. Si aucun widget ne pouvait utiliser le clavier, je cacherais simplement le clavier. – SoCalCoder

Questions connexes