2012-07-17 12 views
5

EDITAR: solucionado. Respuesta publicada por separado debajo deteclado de Android todavía visibles después del lanzamiento de correo electrónico intención

Estoy iniciando el "seleccionador" de Intent.ACTION_SEND incorporado para que el usuario pueda seleccionar cómo enviar un mensaje desde mi aplicación. Funciona bien, pero si presiono 'Descartar' en el programa de correo electrónico lanzado, vuelve a mi aplicación con el teclado en pantalla aún visible. Intenté cerrarlo con varios encantamientos de imm.hideSoftInputFromWindow (...) pero fue en vano. Alguna idea de cómo solucionar este problema?

Ésta es la forma en que estoy lanzando la 'Selección' y tratar de cerrar el teclado en onActivityResult(). Tenga en cuenta que tabHost es un miembro estático en mi aplicación principal (MainApp) que contiene el objeto tabHost utilizado para crear tabSpecs.

public class L_Secondary extends ListActivity implements myConst 
{ 
    @Override 
    protected void onCreate (Bundle savedInstanceState) 
    { 
    super.onCreate (savedInstanceState); 
    setContentView(R.layout.l_people_secondary); 

    // instantiate the custom array adapter class and pass it some info to build a ListView with. 
    ListView lv = getListView(); 
    lv.setOnItemClickListener (oicl); 
    A_secondary da = new A_secondary (this, android.R.layout.simple_list_item_single_choice, mPiecesArray, mPartsArray); 

    setListAdapter (da); 
    } 

    ... 


    // after launching the email client, the keyboard stays visible 
    // over the Listview. Currently the keyboard gets forced to close 
    // in getView() of the ArrayAdapter class da, in onCreate() above     
    public void launchEmail() 
    { 
    try 
    { 
    // use the builtin chooser for users mail app 
    Intent sendIntent = new Intent(Intent.ACTION_SEND, Uri.fromParts ("mailto", "[email protected]", null)); 
    sendIntent.setType("text/plain");  

    sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "msg_subject"); 
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, "msg_body"); 

    startActivityForResult (Intent.createChooser(sendIntent, "Send via which Application?"), 0); 
    } 
    catch (Exception e) 
    { 
    Toast.makeText (this, "No activity was found to handle this action",Toast.LENGTH_SHORT).show(); 
    } 
    } 

... 

} 

Respuesta

0

Terminé usando el Contexto pasado a getView() en mi clase ArrayAdapter que se crea una instancia de la clase L_Secondary. No es el mejor lugar para hacer esto porque cada vez que se desplaza la lista, o tocado, o se mueve se va a comprobar si el teclado es visible y cerrarla en caso afirmativo. No obstante, es un comienzo. Desde aquí puedo intentar encontrar un lugar más eficiente para ponerlo.

@Override 
public View getView (int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    Context ctx = parent.getContext(); 

    if (row == null) 
    { 
     LayoutInflater inflater = ((Activity) ctx).getLayoutInflater(); 
     row = inflater.inflate (R.layout.li_secondary, parent, false); 
    } 

    // hide the keyboard when coming back from Email client Intent 
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); 
    if (imm.isActive() == true) 
     imm.hideSoftInputFromWindow (MainApp.tabHost.getCurrentTabView().getApplicationWindowToken(),imm.HIDE_NOT_ALWAYS); 
    ... 
} 
+0

¿Por qué está funcionando?Necesito entender para tratar de usarlo en mi situación. – Poutrathor

0

Usar este código antes de llamar a un intento de CORREO // Ed es EditarTexto

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 

para ocultar teclado

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

para mostrar el teclado

imm.showSoftInput(ed, 0); 

intento esta código en el método onRestart(), así

O

puede probar esto, así

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

Gracias.

+0

me gustaría probar esto, pero yo no tengo una EditarTexto en mi ListView. Voy a experimentar gracias. – wufoo

+0

He editado mi código para una solución más en caso de que no tenga ningún texto de edición en su listActivity. Gracias – SALMAN

+0

Gracias. Tengo set StateHidden pero aún no tuve suerte. – wufoo

0

creo que se podría llamar el método hideSoftInputFromWindow en onResume()

protected void onResume() 
{ 
    InputMethodManager keyboard = (InputMethodManager) 
    getSystemService(Context.INPUT_METHOD_SERVICE); 
    keyboard.hideSoftInputFromWindow(userInput.getWindowToken(), 0); 
} 
+0

¿Por qué está esto downvoted? – Leon

+0

No estoy seguro, pero si estoy haciendo algo mal por favor hágamelo saber lo que es –

+0

userInput? –

2

me encontré con esto funcionó para mí añadiéndolo a mi onResume()

protected void onResume() 
{ 
    Handler h = new Handler(); 
    h.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     keyboard.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0); 
    } 
    }, 500); 
} 
+0

Lo único que funcionó ... – peresisUser

+0

También puede escribir esto en OnActivityResult() en lugar de onResume(). –

Cuestiones relacionadas