2011-02-10 7 views
8

Ho uno ListView con uno EditText in ogni riga. Ho impostato windowSoftInputMode a adjustPan nel manifest per questa attività, quindi quando tocco su un EditText le padelle del layout in modo che sia visibile sopra la tastiera.EditText in ListView con windowSoftInputMode adjustPan

Questo funziona la prima volta che tocco su un EditText. Ma se premo il pulsante Indietro per chiudere la tastiera, quindi tocca di nuovo lo stesso EditText (senza toccare altro, quindi il cursore rimane nel primo EditText), la tastiera ritorna ma il layout non esegue il pan questa volta. Il risultato di ciò è che EditText è nascosto dietro la tastiera.

Qualcuno ha riscontrato questo comportamento/sa come risolverlo?

Grazie

+0

sembra un bug per me! – Dori

risposta

8

Ancora non è sicuro perché questo accade, ma ho una soluzione.

ho sottoclasse EditText e sovrascritto il metodo onKeyPreIme(int keyCode, KeyEvent event) come segue:

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     clearFocus(); 
    } 
    return super.onKeyPreIme(keyCode, event); 
} 

Ora, quando viene premuto il tasto indietro, il EditText abbandona messa a fuoco. Quindi toccandolo di nuovo ha il comportamento desiderato.

+0

Grazie Matt ... Sono contento di non essere l'unico a notare tutte queste anomalie in Android. Ancora giovane però ... le API del futuro si faranno rock. Quando hai un po 'di tempo, controlla questo altro errore che ho rilevato: http://stackoverflow.com/questions/15267137/android-adjustpan-not-working-after-edittext-container-has-been-translated Molte grazie – Houston

+0

Bel trucco. Molte grazie :) –