2014-12-13 9 views
18

Ricevo questo avviso (dal titolo della domanda) in una vista Android personalizzata che sto sviluppando.La vista personalizzata ... sostituisce onTouchEvent ma non esegueClick

Perché ricevo l'avviso? Qual è la logica dietro di esso, ad esempio, perché è una buona pratica sovrascrivere anche performClick quando si sostituisce onTouchEvent?

+0

http://stackoverflow.com/questions/24952312/ontouchlistener-warning- onuch-should-call-viewperformclick-when-a-click-is-d, http://android-er.blogspot.fr/2014/09/warning-custom-view-overrides.html –

+0

@shayanpourvatan Ho visto questi collegamenti . Ma non sono la stessa cosa della mia domanda. –

+0

@ peter.petrov Sono esattamente la stessa cosa. Ed entrambi hanno le stesse risposte inutili - non c'è nulla da gestire e performClick() sembra non fare nulla di utile. Ho deciso ora di sopprimere l'avvertimento Lint per questo. –

risposta

12

Questo avviso dice di ignorare performClick

@Override 
public boolean performClick() { 
    // Calls the super implementation, which generates an AccessibilityEvent 
     // and calls the onClick() listener on the view, if any 
     super.performClick(); 

     // Handle the action for the custom click here 

     return true; 
} 

Ma non è obbligatoria. Come ho creato un knobView personalizzato e sta funzionando abbastanza bene dove sto anche affrontando questo avviso.

+0

Il punto cruciale è la parte in cui hai solo il commento "Gestisci l'azione per il clic personalizzato qui". Cosa dovrei gestire lì? Non c'è niente di utile da pensare. Non voglio scrivere un codice inutile per rimettere a posto Lint. –

5

Anche se è solo un avviso e potrebbe essere ignorato, sembra necessario per l'accessibilità.

dettagli sono descritti here

Poi, quando si gestiscono un'azione, è necessario aggiungere il performClick, vale a dire:

if (action == MotionEvent.ACTION_DOWN) { 
     performClick(); // Call this method to handle the response, and 
     // thereby enable accessibility services to 
     // perform this action for a user who cannot 
     // click the touchscreen. 
+0

Purtroppo il blog non spiega davvero nulla. Ho un frammento in cui puoi "dipingere" la tua firma. Non capisco perché qualcuno dovrebbe mai beneficiare di un gestore di clic che non fa nulla. :(Non voglio scrivere codice stupido solo per chiudere Lint. –