Ich versuche zu sehen, ob es eine Möglichkeit gibt, eine einzige Methode zu erstellen, um einen Touch-Listener für mehrere Schaltflächen zu implementieren, da ich ziemlich viele Schaltflächen habe, die fast genau das tun gleiche Sache. Der einzige Unterschied in dem, was sie tun, ist die Nachricht, die sie über meine sendMessage() -Methode senden würden, und wie lange die Schaltfläche gedrückt werden muss, damit die Nachricht gesendet wird. Wenn es einen Weg gibt es zu tun, was könnte das sein? Und warum sollte so etwas nicht funktionieren?Eine Methode, um onTouchListener() für mehrere Schaltflächen zu implementieren
//Within onCreate Method...
Button mButton = (Button) findViewbyId(R.id.three_sec_button);
mButton = addTouchTimer(mButton, 3, 3);
Calls -
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;
}
Es scheint nur, dass es für die Effizienz willen ein besserer Weg, es zu tun, als die Umsetzung einzelne Zuhörer für jede Taste sein muss. Als Anmerkung enthält sendMessage() einen Log-Aufruf, der den booleschen Wert verwendet. Ich möchte sehen, wie er gesetzt wird, wenn er übergeben wird. Das ist der einzige Grund, warum es beim Loslassen der Taste aufgerufen wird.
Mann, ich durch den Computer zu lange gesessen haben kann. Sollte das gewusst haben.Allerdings, Frage. Meinst du, ich sollte eine neue Klasse mit dem Namen MyTouchListener implementieren oder hast du das nur willkürlich hinzugefügt? Kann ich nicht einfach tun, was unten gesagt wurde, und es in meiner Hauptklasse implementieren und dann die onTouch-Methode wie "m1.setOnTouchListener (onTouch()); – zgc7009
anrufen. Sie können Ihre Hauptaktivität implementieren Touch-Listener. Und können meine Antwort sehen – Chetna
@ zgc7009: Wenn wir Ihr Problem gelöst haben, akzeptieren Sie bitte eins von ihnen als Antwort. Es wird für andere nützlich sein. – Chetna