java - 长按时执行操作

标签 java android

您好,我正在尝试在用户按住按钮时执行一些操作。

我的问题是我的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/

相关文章:

java - 在 Java 中使用 Pushetta 发送推送通知会导致 403 Forbidden

android - Firebase 用户更改电子邮件或电话号码

android - 找不到 FingerPaint 样本

android - 在 Eclipse 上运行 Android 模拟器的问题

java - Butterknife 在我的 Android 应用程序中根本不起作用

java - 如何在列表中查找重复项并合并它们

java - 规范化数组是什么意思?

java - JConsole 远程连接到 JBoss EAP

android - 如果 Parse 云数据服务失败会怎样?

android - Android 中的通知取消按钮