8

Tengo una aplicación de Android que contiene un ViewPager con 2 fragmentos. El primer fragmento contiene un campo EditText. Cuando se inicia la aplicación, ese campo se enfoca inmediatamente y se inicia el teclado virtual (lo que quiero que ocurra). El segundo fragmento solo contiene una lista (no campos de texto editables). Cuando paso del fragmento 1 al fragmento 2, me gustaría que el teclado desaparezca. Nada de lo que he intentado parece funcionar. El teclado no solo permanece a la vista, sino que continúa actualizando el campo EditText del fragmento 1.Hide Soft Keyboard en la aplicación para Android de ViewPager Fragments

Me imagino que estoy usando un código incorrecto para ocultar el teclado o colocarlo en una ubicación incorrecta. ¡Si alguien puede publicar un ejemplo de la implementación correcta, sería muy apreciado!

Mi último intento fue colocar código que debe ocultar el teclado en el fragmento de 1 onDetach) método (:

@Override 
public void onDetach() 
{ 
    super.onDetach(); 

    InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE); 

    // I'VE TRIED ALL THREE BELOW, NONE OF THEM WORK... 

     // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(), 0); 
     // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
     // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
} 

Respuesta

10

Ver this answer. Básicamente, debe tener el OnPageChangeListener de su ViewPager para ocultar el teclado por usted. (Si quiere que su animación deslizar permanezca suave, hacer esto en vez de onPageScrollStateChangedonPageSelected.)

@Override 
public void onPageScrollStateChanged(int state) 
{ 
    if (state == ViewPager.SCROLL_STATE_IDLE) 
    { 
     if (mViewPager.getCurrentItem() == 0) 
     { 
      // Hide the keyboard. 
      ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) 
       .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 
     } 
    } 
} 
0

En su AndroidManifest se debe añadir a la Actividad declaración androide: windowSoftInputMode = "stateHidden":

<activity 
     android:name="YourActivity"    
     android:windowSoftInputMode="stateHidden">   
</activity> 

Y en su diseño de eliminar de los niños requestFocus de EditarTexto:

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="15dp" 
    android:ems="10" > 
    <requestFocus /> 
</EditText> 
+0

No sería esto evitar que el teclado muestre todo el tiempo? Solo quiero ocultarlo en el fragmento 2. – Jabari

+0

Esto evita mostrar el teclado cuando la actividad se carga con tus fragmentos. Pero si hace clic en EditText, se mostrará el teclado. Afecta a todos los fragmentos cargados por su actividad. Para ocultar siempre y no mostrar nunca el teclado, en el manifiesto debe usar stateAlwaysHidden en android: windowSoftInputMode. Lo siento por mi ingles. – ClarkXP

+0

Casi funciona, pero cuando cambias a un fragmento diferente, el teclado no está oculto. – Timmmm

0
getActivity().getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
Cuestiones relacionadas