Как вставить цикл в setOnLongClickListener
В Android приложении нужно при длительном нажатии отправлять символ, пока зажата кнопка. Смотрел разные варианты, так и не смог ничего подобрать. Пока длительное нажатие отправляет символ 10 раз. Это очень корявое, временное решение.
b26.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MyThred.sendData("J");
mytext.setText("Отправляем: J");
}
});
b26.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
switch (view.getId()){
case R.id.b26:
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
MyThred.sendData("J");
mytext.setText("Длительное нажатие отправляет: J 10 раз");
break;
}
return true;
}
});
Ответы (1 шт):
Автор решения: Barmaley Red Star
→ Ссылка
Вам нужно детектировать окончание LongPress, например так:
private Sender sender=new Sender(); //thread для запуска "J"
private View.OnLongClickListener longListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View pView) {
buttonLongPressed = true;
//запускаем Thread, который генерит в бесконечном цикле отправку J
sender.start();
return true;
}
}
View.OnTouchListener touchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View pView, MotionEvent pEvent) {
pView.onTouchEvent(pEvent);
// ловим момент когда кнопка отпущена
if (pEvent.getAction() == MotionEvent.ACTION_UP) {
if (buttonLongPressed) {
buttonLongPressed = false;
//где то здесь останавливаем Thread
sender.stop();
}
}
return false;
}
}
private class Sender extends Thread {
private volatile boolean stop;
Sender() {
stop=false;
}
public void run() {
stop=false;
while(!stop) {
MyThred.sendData("J");
}
}
public synchronized void stop() {
stop=true;
}
}
Написано на коленках, я не компилятор, могут быть ошибки - здесь только идея - остальное уже сами.