2012-10-03 17 views
6

Ho diversi widget in una vista, ognuno dei quali ha bisogno del proprio ActionMode. Vedo che l'ActionMode non si chiude automaticamente quando l'utente tocca fuori dalla barra delle azioni. Pertanto, è facilmente possibile per l'utente avviare un ActionMode per un controllo, quindi toccare (longclick nel mio caso) un altro controllo e impilare un secondo ActionBar in cima al primo. Ciò causa la distruzione della logica di programmazione.come rilevare se la modalità di azione è già presente

È possibile tenere traccia dell'attuale ActionMode con una variabile membro a livello di attività e ignorare quella corrente se è necessaria una nuova. In ogni caso, questo rende il mio codice disordinato da leggere e mantenere. Inoltre, preferirei ignorarlo immediatamente quando l'utente tocca qualcosa al di fuori della barra delle azioni.

Qualche suggerimento su come gestirlo?

risposta

6

Ero alla ricerca di una soluzione di questo problema qualche tempo fa e, come so, non è stato possibile tracciarlo senza salvare lo stato attuale della modalità di azione in una variabile globale. Tuttavia, non penso che una variabile con il nome corretto possa rendere il tuo codice disordinato.

+0

Ok, ma a parte la confusione, diciamo che l'utente fa clic su un EditText che non hai sottoclasse. Come respingi la barra delle azioni ora inappropriata? –

+0

Ok, se ho capito bene ... l'ho fatto così: implementato la variabile globale 'ActionMode mMode;', lo ha riempito con la modalità di azione corrente in un metodo 'onCreateActionMode (...)' e poi chiama 'mMode .finish() 'quando ho bisogno di uscire dalla modalità di azione corrente – user1049280

+0

Giusto, ho capito. Ma come fai a sapere quando chiamare finish()? Cioè, ci sono molti posti che un utente può cliccare; fai una sottoclasse di ogni oggetto e controlli MotionEvent.ACTION_DOWN e poi chiama finish()? Sarebbe molto incline all'errore, questi pezzetti di codice verrebbero sparsi dappertutto. –

Problemi correlati