J'ai eu un problème similaire avec le clavier logiciel; bien que dans mon cas, il ne s'afficherait même pas sans changer de vue avec setContentView. Après quelques expériences, j'ai trouvé la solution qui fonctionne toujours pour moi. L'idée était d'intercepter l'affichage/la dissimulation du clavier logiciel pour tout descendant EditText. Pour cela, j'ai remplacé onWindowFocusChanged de l'activité.
L'astuce était de cacher le clavier quand il n'est plus nécessaire.
Comme vous pouvez le voir, j'ai utilisé toggleSoftInput avec SHOW_IMPLICIT à la place de toute constante HIDE. Dans ce cas, IMEManager ne conserverait le clavier visible que si la vue focalisée l'exige sinon il sera caché.
private boolean softInputActive;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
InputMethodManager IMEManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
View focusedView = getCurrentFocus();
// Find the primitive focused view (not ViewGroup)
while (focusedView instanceof ViewGroup) {
focusedView = ((ViewGroup) focusedView).getFocusedChild();
}
if (hasFocus) {
if (focusedView instanceof EditText && focusedView.isEnabled()
&& !IMEManager.isActive(focusedView)) {
IMEManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
softInputActive = true;
}
} else if (softInputActive) {
if (focusedView != null && IMEManager.isActive()) {
IMEManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
}
softInputActive = false;
}
}
Pour autant que je sais que vous ne devriez pas utiliser setContentView plusieurs fois, voir http://stackoverflow.com/questions/6811989 –
Merci pour l'aide. Y at-il une bonne source pour ces types de conseils de programmation Android? Je suis nouveau à la programmation Android et je ne sais pas ce que je devrais et ne devrais pas faire. – schlaegerz