我正在制作一个应用程序,当你按下按钮时,一个有数字的文本视图会增加(直到你放手为止)。
我试着使用OnTouch,但这不会增加数字,除非你移动你的手指在按钮。我试着在这里看了一些堆叠溢出的问题,并实现了建议的解决方案,但现在似乎已经崩溃了……
ontouch听者:
upb.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
/* Button pressed */
if(event.getAction() == MotionEvent.ACTION_DOWN){
startIncreasing();
}
if(event.getAction() == MotionEvent.ACTION_UP){
stopIncreasing();
}
return true;
}
private void startIncreasing(){
setIsIncreasing(true);
new Thread(new Runnable() {
public void run() {
while(isIncreasing()){
if(speed<12){ //max speed determined here
speed++;
speedtext.setText(speed + " km/h");
downb.setEnabled(true);
homeb.setEnabled(false);
revb.setEnabled(false);
//send signal to speed up
}
else {
speedtext.setText("MAX " + speed + " km/h");
upb.setEnabled(false);
}
}
}
}).start();
}
}); 随后在代码中:
synchronized private void stopIncreasing(){
setIsIncreasing(false);
}
synchronized private boolean isIncreasing(){
return continueIncreasing;
}
synchronized void setIsIncreasing(boolean newSetting){
continueIncreasing = newSetting;
}有人能发现我做错了什么吗?还是我应该用一种完全不同的方式来做这件事?
谢谢你的帮助
发布于 2013-10-29 07:54:41
在没有看到日志的情况下,我相信您的应用程序会崩溃,因为您正在从后台线程(在TextView中)更新speedtext.setText(speed + " km/h");。更新UI元素必须从UI线程(main)完成。您可以使用runOnUiThread()方法从UI线程执行此类更新。
https://stackoverflow.com/questions/19652502
复制相似问题