2012-01-31 11 views
5

Voglio rilevare l'evento Back Key nel mio CustomView (ad es. EditText). In molti casi, è stato ottenuto sovrascrivendo lo onKeyDown() o dispatchKeyEvent(), a condizione che il mio CustomView ottenga lo stato attivo.Come rilevare il tasto Indietro nel mio CustomView

CustomView.java

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

Tuttavia, se un'attività compresa la CustomView è anche override del onKeyDown() o dispatchKeyEvent(), potrebbe non funzionare più. Cioè, l'Activity ha ottenuto il Back-KeyEvent prima che CustomView lo abbia.

Preferisco preferire il Back-KeyEvent prima dell'attività.

per favore dimmi alcune idee su questo problema. Grazie.

risposta

0

Ignora onKeyDown nelle attività e restituisce false. In modo che l'evento venga propagato anche ad altre viste.

Se l'evento è stato gestito, restituire true. Se si desidera consentire che l'evento venga gestito dal ricevitore successivo, restituire false.

+2

Non è del tutto vero. Il metodo 'onKeyDown' in' Activity' viene chiamato quando un tasto viene premuto e non gestito da nessuna delle viste all'interno dell'attività. Prima viene chiamato onKeyDown sulla Vista focalizzata, quindi su Attività, quindi sul resto. –

+0

Ma per quanto stiamo restituendo false, andrà al prossimo ricevitore. Destra? Sebbene la risposta di @MoshErsan potrebbe essere preferibile per farlo. Ma come accennato nella domanda, onKeyDown è già sovrascritto in Activity, quindi devi tornare falso lì, non importa cosa! :) –

+2

È proprio come dici tu. A tuo favore, potrei capire l'ordine in cui vengono chiamati i metodi. In realtà quando ho provato, era 'Visualizza # onKeyPreIme',' Attività # dispatchKeyEvent', 'Visualizza # dispatchKeyEvent',' Visualizza # onKeyDown', infine, 'Attività # onKeyDown'. Grazie! – Gottie

0

si può provare ad usare

setFocusableInTouchMode(true) 
setFocusable(true) 
requestFocus() 

sul tuo CustomView