您好,我正在尝试在用户按住按钮时执行一些操作。
我的问题是我的Runnable
不会“运行”。
这是我的代码:
@Override
public boolean onLongClick(View v) {
final Runnable r = new Runnable()
{
public void run()
{//do the forwarding logic here
int test = 0;
if(holdingDown)
test++;
else
return;
Log.i("test", test+"");
}
};
r.run();
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
{
holdingDown= false;
Log.i("holdingDown", "false");
break;
}
}
return false;
}
onTouch
用于检测用户何时停止按下按钮。当我查看日志时,我发现 Runnable
仅运行一次。
我的测试日志只得到值1。
仅当我停止触摸按钮时,Log.i("holdingDown", "false")
的日志调用才会在正确的时间触发。
为什么我的Runnable
无法运行?谢谢。
编辑:
我尝试了这段代码:
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
holdingDown = true;
new Thread(new Runnable() {
@Override
public void run() {
if(holdingDown)
{
int test = 0;
test++;
Log.i("test", test+"");
}
else
return;
}
}).start();
return false;
}
它直到无法工作。
最佳答案
您可以尝试使用 Thread 而不是 Runnable,如下所示:
Thread thread = new Thread() {
@Override
public void run() {
//code you want to run on long press
} };
thread.start();
或者
您可以尝试将 Runnable 放入线程中,如下所示:
Thread thread = new Thread(new Runnable() {
public void run() {
// code you want to run on long press
}
});
thread.start();
更新:-试试这个?
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
holdingDown = true;
new Thread(new Runnable() {
@Override
public void run() {
if (holdingDown) {
int test = 0;
test++;
Log.i("test", test + "");
} else {
Log.i("test", "else");
}
return;
}
}).start();
return false;
}
关于java - 长按时执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043762/