这是我的代码。我想积极查看第二次按下按钮的次数,我也想生动地进行此操作。如果我按下按钮,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秒钟后仍然按下按钮,则处理程序将永远不会停止可运行,因此可运行事件会一次又一次地启动。这是简单的可运行和处理程序循环。