Tengo un FragmentActivity
uso de ViewPager
para servir varios fragmentos. Cada uno tiene ListFragment
el siguiente diseño:
<?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>
Al iniciar la actividad, aparece el teclado en pantalla. Para remediar esto, hice lo siguiente dentro del fragmento:
@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);
}
Guardo el ViewGroup container
parámetro entrante de onCreateView
como una forma de acceder al token de ventana para la actividad principal. Esto se ejecuta sin errores, pero el teclado no se oculta de la llamada a hideSoftInputFromWindow
in onStart
.
Originalmente, intenté usar el diseño inflado en lugar de container
, es decir:
imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);
pero esto arrojó un NullPointerException
, presumiblemente porque el fragmento en sí no es una actividad y no tiene un token de ventana único.
¿Hay alguna forma de ocultar el teclado virtual desde dentro de un fragmento, o debería crear un método en el FragmentActivity
y llamarlo desde dentro del fragmento?