首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ontouch功能

Ontouch功能
EN

Stack Overflow用户
提问于 2013-10-29 07:50:36
回答 1查看 65关注 0票数 0

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

我试着使用OnTouch,但这不会增加数字,除非你移动你的手指在按钮。我试着在这里看了一些堆叠溢出的问题,并实现了建议的解决方案,但现在似乎已经崩溃了……

ontouch听者:

代码语言:javascript
复制
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();
        }
}); 

随后在代码中:

代码语言:javascript
复制
synchronized private void stopIncreasing(){
        setIsIncreasing(false);
    }

    synchronized private boolean isIncreasing(){
        return continueIncreasing;
    }

    synchronized void setIsIncreasing(boolean newSetting){
        continueIncreasing = newSetting;
    }

有人能发现我做错了什么吗?还是我应该用一种完全不同的方式来做这件事?

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-29 07:54:41

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19652502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档