2011-01-17 11 views
5

Ho ListActivity con elementi personalizzati, in cui ogni elemento ha il proprio TextEdit. Il tocco su uno di questi porta la tastiera IME e provoca il ridimensionamento di ListView. Quindi EditText, che ha recentemente ricevuto la messa a fuoco per tocco, lo perde. Il secondo tocco è necessario per metterlo a fuoco o sicuro. Succede solo quando ho spostato di 1 elementi nell'elenco.Android: ListView con EditTexts mette a fuoco e IME

C'è un modo per aprire IME e mantenere l'attenzione su EditText con un solo tocco?

+2

Come suppongo che le linee guida dell'interfaccia utente di Android in generale sconsigliano l'uso di controlli attivi, che possono acquisire il focus e l'input in ogni voce di elenco. Quindi sto cercando di imbrogliarlo. Finora l'impostazione di messa a fuoco esplicita con requestFocus su particolari EditText non è di aiuto in quanto l'adattatore rimappa ogni elemento dopo ListView.onSizeChanged, quindi ritengo che la rimappatura dell'adattatore sia la fonte di attenzione persa. –

risposta

0

Vuoi ridimensionare la lista? Puoi sovrascrivere ListView.onSizeChanged e consumarlo invece di "collegarlo" a super.onSizeChanged (supponendo che la tua ipotesi sulla fonte dell'errore sia corretta)?

+0

Ho eseguito l'override - non è d'aiuto, poiché la rimappatura nell'adattatore avviene dopo che il ridimensionamento è stato eseguito, ovviamente non è perché ListView invalida. Ora sto lavorando alla creazione di un elenco di TextView con la possibilità di modificare l'elemento toccando un nuovo schermo ... –

+0

È possibile, naturalmente, mostrare una finestra di dialogo con TextEdit quando si tocca un elemento della lista. Le finestre di dialogo tendono ad appartenere alla stessa attività da cui sono state avviate e si posizionano proprio sopra l'attività principale senza nasconderlo completamente. In questo modo ottieni anche un'indicazione visiva del fatto che non hai lasciato l'attività corrente. Forse questo link potrebbe essere d'aiuto: http://groups.google.com/group/android-beginners/browse_thread/thread/efdfb8c7e24fee93?pli=1 – dbm

+0

Mi sono appena reso conto che avere un dialogo o un'altra attività dedicata per l'editing la voce dell'elenco è probabilmente il modo ufficiale nativo dell'approccio GUI Android. –

0

Ho risolto questo memorizzando il toccato EditText in una variabile e richiedendo lo stato attivo su di esso dopo un ritardo. È un hack, ma a volte Android richiede hack.

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
     EditText editText = getListAdapter().tappedEditText; 
     if (editText != null) { 
      editText.requestFocus(); 
     } 
    } 
}, 100); 
Problemi correlati