0

我正在制作一个应用程序,当您按住按钮时,带有数字的文本视图会增加(直到您放手)。

我尝试使用 OnTouch,但除非您在按钮中移动手指,否则不会增加数字。我尝试在stackoverflow中查看一些已回答的问题并实施建议的解决方案,但它现在似乎只是崩溃了......

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;
    }

任何人都可以发现我做错了什么?或者我应该以完全不同的方式做到这一点?

感谢您的帮助

4

1 回答 1

1

在没有看到日志的情况下,我相信您的应用程序崩溃了,因为您正在TextView从后台线程(在 中speedtext.setText(speed + " km/h");)更新。更新 UI 元素必须从 UI 线程(主线程)完成。您可以使用runOnUiThread()方法从 UI 线程进行此类更新。

于 2013-10-29T07:54:41.823 回答