这是我的代码。我想积极查看第二次按下按钮的次数,我也想生动地进行此操作。如果我按下按钮,Textview应该每秒更新一次。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                textView.setText("Time: "+timer);
                timer++;
            }
        };
        button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if(event.getAction()==MotionEvent.ACTION_DOWN)
                {
                    while(!button.isPressed())
                    {
                        handler.postDelayed(runnable,1000);
                    }

                }
                else if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    handler.removeCallbacks(runnable);
                }
                return false;
            }
        });
    }


顺便说一句,这段代码崩溃了,因为while循环无法按我想要的方式工作。如果我不使用任何循环,textview只会更新1次。我希望它每秒更新一次。感谢所有将提供帮助的人。

最佳答案

我找到了解决此问题的方法。该方法属于处理程序post(),该处理程序在其中开始可运行,使我免于这个问题。有代码。

button.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if(event.getAction()==MotionEvent.ACTION_DOWN)
            {
                handler = new Handler();
                runnable = new Runnable() {
                    @Override
                    public void run() {
                        handler.postDelayed(runnable,1000);
                        textView.setText("Time: "+timer);
                        timer++;

                    }
                };
                handler.post(runnable);

            }
            else if(event.getAction()==MotionEvent.ACTION_UP)
            {
                handler.removeCallbacks(runnable);
            }
            return false;
        }
    });


当down事件开始时,运行方法就从它开始。运行方法超过1秒钟,然后退出。如果1秒钟后仍然按下按钮,则处理程序将永远不会停止可运行,因此可运行事件会一次又一次地启动。这是简单的可运行和处理程序循环。

08-17 17:34