6

Tengo problemas con el teclado en pantalla. Tengo una actividad con EditText que muestra el teclado y un botón para ir a una segunda actividad. La segunda actividad muestra un ProgressDialog en su onCreate(), hace cosas y descarta el ProgressDialog. El problema es que mientras se muestra ProgressDialog, también lo está el teclado.Ocultando el teclado después de llamar a una actividad nueva que muestra un ProgressDialog

Me gustaría que el teclado desaparezca antes de crear el ProgressDialog. Busqué exhaustivamente tanto StackOverflow como otros sitios, pero nada parece funcionar con este escenario en particular.

Estoy adjuntando dos fotos para su referencia:

http://i45.tinypic.com/2rzq7b6.pnghttp://i45.tinypic.com/34ret1z.png

Este es el código de la primera actividad:

public class FirstActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

y este es el código de la segunda actividad:

public class SecondActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second); 

     // TODO: hide keyboard here 

     final ProgressDialog dialog = ProgressDialog.show(this, "", "Please wait...", true, false, null); 

     // in real code, here there is an AsyncTask doing stuff... 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       dialog.dismiss(); 
      } 
     }, 5000); 
    } 
} 

Gracias

+0

Tome un vistazo a esto: http://stackoverflow.com/a/3858873/1321873 – Rajesh

+0

@Rajesh, ya se intentó , no aplicable aquí. La segunda actividad debe ocultar el teclado, incluso si el teclado fue mostrado por otra actividad. – Venator85

Respuesta

20

resuelven usando una variación de la técnica Publicado por phalt:

InputMethodManager im = (InputMethodManager) this.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

Este código funciona correctamente durante onCreate/onStart/onResume, ya que no se basa en una visión enfocada a obtener el token de ventana.

+2

Esto no funciona para mí. Ponlo en el onCreate. –

10

Escriba este código en el archivo manifest.xml para la actividad 'SecondActivity'.

<activity name="EditContactActivity" 
    android:windowSoftInputMode="stateAlwaysHidden"> 
    ... 
</activity> 
+0

Esta no es una opción viable para mí, ya que el diseño de la segunda actividad puede incluir un EditText (determinado por el resultado de AsyncTask). – Venator85

+1

Me pareció útil, por lo que el teclado aparecería cuando fuera necesario, pero no automáticamente al cargar la pantalla: android: windowSoftInputMode = "stateHidden" –

+0

necesita stateAlwaysHidden | adjustNothing no solo stateAlwaysHidden – Odaym

1

puede utilizar como esto también: imm

InputMethodManager;

Write debajo de la línea en onCreate() Método:

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

Y esta línea está en onclick del botón:

imm.hideSoftInputFromWindow (arg0.getWindowToken(), 0);

Ejemplo:

public class FirstActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    findViewById(R.id.button1).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

      imm.hideSoftInputFromWindow(arg0.getWindowToken(), 0); 
      Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
      startActivity(intent); 
     } 
    }); 
} 
} 
+0

Esto normalmente funciona, pero la segunda actividad está en un proyecto de biblioteca, mientras que la primera actividad está en otro proyecto que usa este proyecto de biblioteca. Por lo tanto, como no tengo control sobre la primera actividad, la segunda actividad debe manejar directamente el ocultamiento del teclado. – Venator85

-1

Ha intentado:

InputMethodManager im = (InputMethodManager) 
this.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 

im.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 
InputManagerMethod.HIDE_NOT_ALWAYS); 

Este es el código que lanzo en por puntos que quiero para ocultar el teclado.

+0

Bloquea la aplicación con una NullPointerException ya que en onCreate (obviamente después de setContentView), onStart y onResume todavía no hay una vista enfocada. – Venator85

+0

Está bien, ¿ha intentado en cambio configurar el teclado como oculto en el manifiesto de actividad y luego mostrar las palabras clave posteriores a través del código? Editar: por ejemplo: tome la respuesta de Krishna Suthar a continuación y luego invierta mi código para que se pueda usar el teclado. – phalt

+0

Esto arrojará una excepción de puntero nulo porque tratará de obtener el foco actual y no obtendrá uno. Intenta ejecutar el script mono en tu código. En un punto, podría darle un puntero nulo. –

0

Si en el fragmento Clase

@Override 
    public void onResume() 
    { 
     getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     super.onResume(); 
     } 

Si En la Actividad de Clase

@Override 
    public void onResume() 
    { 
     this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     super.onResume(); 
     FetchLocation fl = new FetchLocation(mContext, locationResult); 
    } 
+1

funciona mejor para mí .... – swetha

Cuestiones relacionadas