Sto provando a vedere se esiste un modo per creare un singolo metodo per implementare un listener di tocco per più pulsanti, visto che ho un paio di pulsanti che fanno quasi esattamente il stessa cosa. L'unica differenza in ciò che fanno è il messaggio che invierebbe tramite il mio metodo sendMessage(), e per quanto tempo il pulsante deve essere tenuto premuto per il messaggio da inviare. Se c'è un modo per farlo, quale potrebbe essere? E inoltre, perché non dovrebbe funzionare qualcosa del genere?Unico metodo per implementare onTouchListener() per più pulsanti
//Within onCreate Method...
Button mButton = (Button) findViewbyId(R.id.three_sec_button);
mButton = addTouchTimer(mButton, 3, 3);
chiede -
private Button addTouchTimer(Button button, final int sec, final int messageNum){
button.setOnTouchListener(new View.OnTouchListener() {
boolean longEnough = false;
long realTimeLeft = sec * 1000;
@Override
// This will make it so that a message is only sent if the button is held down for 3 seconds
// Otherwise it won't send. It is sent during the hold down process, releasing it returns a false
// value and no message is sent.
public boolean onTouch(View arg0, MotionEvent arg1) {
Log.d("Button", "Touchy Touchy!");
if(arg1.getAction() == MotionEvent.ACTION_DOWN){
buttonPressTime = new CountDownTimer(realTimeLeft, 1000){
@Override
public void onTick(long millisUntilDone){
realTimeLeft = millisUntilDone;
}
@Override
public void onFinish() {
long timeLeft = realTimeLeft;
long currTime = System.currentTimeMillis();
long realFinishTime = currTime + timeLeft;
while(currTime < realFinishTime){
currTime = System.currentTimeMillis();
}
longEnough = true;
sendEmergencyMessage(longEnough, messageNum);
}
}.start();
}
else if(arg1.getAction() == MotionEvent.ACTION_UP){
buttonPressTime.cancel();
sendMessage(longEnough, messageNum);
}
return longEnough;
}
});
return button;
}
E sembra proprio che, per l'amor di efficienza ci deve essere un modo migliore di farlo che attuare i singoli ascoltatori per ogni pulsante. Come nota, sendMessage() ha una chiamata di registro che utilizza il valore booleano, voglio vedere come viene impostato quando viene passato. Questo è l'unico motivo per cui viene chiamato durante il rilascio del pulsante.
uomo, mi potrebbe essere stato seduti dal computer troppo a lungo. Avrei dovuto sapere questo.Tuttavia, domanda. Vuoi dire che dovrei implementare una nuova classe chiamata MyTouchListener o l'hai appena aggiunta arbitrariamente? Non posso semplicemente fare ciò che è stato detto di seguito e implementarlo nella mia classe principale e quindi chiamare il metodo onTouch come "m1.setOnTouchListener (onTouch()); – zgc7009
Puoi rendere la tua attività principale implementare l'ascoltatore del tocco e vedere la mia risposta per riferimento – Chetna
@ zgc7009: Se abbiamo risolto il tuo problema, ti preghiamo di accettarne uno come risposta.Può essere utile per gli altri – Chetna