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?
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? –
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
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. –