Comment masquer le clavier de l'intérieur d'un fragment?
J'ai un FragmentActivity
à l'aide d'un ViewPager
pour servir de plusieurs fragments. Chacun est un ListFragment
avec la mise en page suivante:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<EditText android:id="@+id/entertext"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
Lors du démarrage de l'activité, le clavier affiche. Pour remédier à cela, je n'ai la suite à l'intérieur du fragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Save the container view so we can access the window token
viewContainer = container;
//get the input method manager service
imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
. . .
}
@Override
public void onStart() {
super.onStart();
//Hide the soft keyboard
imm.hideSoftInputFromWindow(viewContainer.getWindowToken(), 0);
}
- Je sauvegarder les entrants ViewGroup container
paramètre de onCreateView
comme un moyen d'accéder à la fenêtre de jeton pour l'activité principale. Cela s'exécute sans erreur, mais le clavier n'a pas obtenir de l'cachés de l'appel à la hideSoftInputFromWindow
dans onStart
.
À l'origine, j'ai essayé d'utiliser le gonflés de mise en page au lieu de container
, j'.e:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
mais cela a jeté un NullPointerException
, sans doute parce que le fragment lui-même n'est pas une activité et ne pas avoir une fenêtre unique jeton?
Est-il un moyen de masquer le clavier de l'intérieur d'un fragment, ou devrais-je créer une méthode dans la FragmentActivity
et de l'appeler à partir de l'intérieur du fragment?
Vous devez vous connecter pour publier un commentaire.
Tant que votre Fragment crée une Vue, vous pouvez utiliser le IBinder (fenêtre jeton) de ce point de vue après il a été attaché. Par exemple, vous pouvez remplacer onActivityCreated dans votre Fragment:
Rien, mais la ligne de code suivante a fonctionné pour moi:
SOFT_INPUT_STATE_HIDDEN
a également travaillé pour moi, mais je ne sais pas quelle est la différence entre ça et "SOFT_INPUT_STATE_ALWAYS_HIDDEN' est.Si vous ajoutez l'attribut suivant votre activité est manifeste définition, il est impossible de supprimer complètement le clavier de popping lors de votre activité ouvre. Espérons que cela aide:
(En complément de votre Activité, de la définition du manifeste):
Garder une instance de ma vue racine dans ma classe
Utilisation de la vue pour masquer le clavier
Exception pour
DialogFragment
cependant, l'accent de l'embeddedDialog
doit être caché, au lieu de seulement la premièreEditText
au sein de l'embeddedDialog
dans Fragemnt de Travail de ce Code
ce sera un travail dans mon cas, lorsque dans des onglets, je switch à partir d'un fragment à l'autre des fragments
Utiliser cette méthode statique, à partir de n'importe où (Activité /Fragment) vous le souhaitez.
Si vous voulez utiliser pour le fragment appelez simplement
hideKeyboard(((Activity) getActivity()))
.Rien de cette travaillé sur API27. J'ai dû ajouter ceci dans le récipient de la mise en page, pour moi, c'était un ConstraintLayout:
Il suffit d'ajouter cette ligne dans votre code:
Dans Kotlin: