在听众中等待1秒钟?

Ada*_*gyi 0 multithreading android wait

我怎样才能做到这一点 ?我尝试了一些线程但没有发生任何事情.

        myView.setOnTouchListener(new OnTouchListener()
        {
            public boolean onTouch(View arg0, MotionEvent arg1) 
            {
                myButton.setClickable(false);

                //Here i want to wait 1 second then:

                myButton.setClickable(true);

                return false;
            }

        });
Run Code Online (Sandbox Code Playgroud)

请问有人在我的代码中等待一秒钟吗?

Ren*_*ard 7

如果你在那里等,你将阻止UI线程.您的用户会因此而讨厌您.如果您详细描述了您想要实现的目标,我们可以帮助您找到更好的解决方案.

更好的解决方案是使用postDelayed方法

    myView.setOnTouchListener(new OnTouchListener()
    {
        public boolean onTouch(View arg0, MotionEvent arg1) 
        {
            myButton.setClickable(false);

            //wait 1 second
            myButton.postDelayed(new Runnable() {

                @Override
                public void run() {
                    myButton.setClickable(true);                        
                }
            }, 1000);


            return false;
        }

    });
Run Code Online (Sandbox Code Playgroud)

  • 是的.我希望op不会使用最高投票的答案,而是一个不会阻止ui的解决方案. (2认同)

waq*_*lam 6

你绝对不需要通过调用Thread.sleep(1000)来阻止UI线程,所以你需要通过在UI线程上1秒后运行所需操作的Handler来实现它:

//initialize it in your activity so that the handler is bound to UI thread
Handler handlerUI = new Handler();

myView.setOnTouchListener(new OnTouchListener()
        {
            public boolean onTouch(View arg0, MotionEvent arg1) 
            {
                myButton.setClickable(false);

                //Here i want to wait 1 second then:

                handlerUI.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                      myButton.setClickable(true);
                    }
                }, 1000);

                return false;
            }

        });
Run Code Online (Sandbox Code Playgroud)