Android 单击按钮后,我如何等待一段时间?

Android 单击按钮后,我如何等待一段时间?,android,wait,runnable,Android,Wait,Runnable,因此,我有一个活动,运行一个简单的蛇和梯子游戏,我想让玩家点击一个按钮并移动,随后电脑会移动。我的问题是,一旦玩家移动,计算机就会立即移动 相反,我希望活动在计算机移动之前等待。我环顾了很多地方,发现等待涉及到使用线程,但我没有在应用程序崩溃的情况下实现它 我声明线程的尝试: final Runnable runnable = new Runnable() { @Override public void run() { w

因此,我有一个活动,运行一个简单的蛇和梯子游戏,我想让玩家点击一个按钮并移动,随后电脑会移动。我的问题是,一旦玩家移动,计算机就会立即移动

相反,我希望活动在计算机移动之前等待。我环顾了很多地方,发现等待涉及到使用线程,但我没有在应用程序崩溃的情况下实现它

我声明线程的尝试:

final Runnable runnable = new Runnable()  {
        @Override
        public void run()
        {
            while (true)
            {

                try
                {
                    Thread.sleep(5000);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }

        }
    };

    Thread thread= new Thread(runnable);
按钮的My onClick()方法:

Button rollButton = (Button) (findViewById(R.id.rollButton));
    rollButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //executes only if current player is a human
            if(GAME_BOARD.getCurrentPlayer().isHuman()) {

                GAME_BOARD.rollDie(); // rolls the die
                showDie(GAME_BOARD); // displays die on screen      
                GAME_BOARD.move();  // moves the player and sets next player as current player
                playerTurn.setText(GAME_BOARD.getCurrentPlayer().getName() +"'s turn");// sets TextView to display who's player's turn it is
                thread.start();  

                if(!GAME_BOARD.getCurrentPlayer().isHuman()) {

                    GAME_BOARD.rollDie();
                    showDie(GAME_BOARD);
                    GAME_BOARD.move();
                    playerTurn.setText(GAME_BOARD.getCurrentPlayer().getName() +"'s turn");                 
                }   
            }

        }
    });
同样,我的问题是,如何使活动在执行第二个if语句之前等待,比如说4秒?

使用倒计时:

CountDownTimer timer = new CountDownTimer(4000, 1000) {
            @Override
            public void onFinish() {
                *function containing the second statement*
            }

            @Override
            public void onTick(long millisLeft) {
                // not ticking
            }
        };
在单击侦听器的onClick方法中使用:

timer.start();
使用倒计时:

CountDownTimer timer = new CountDownTimer(4000, 1000) {
            @Override
            public void onFinish() {
                *function containing the second statement*
            }

            @Override
            public void onTick(long millisLeft) {
                // not ticking
            }
        };
在单击侦听器的onClick方法中使用:

timer.start();

您可以使用
处理程序。postDeleayed
。您必须提供一个可运行到execut的值和延迟时间(以毫秒为单位)。
Runnable
将在UI线程上执行

您可以使用
处理程序。postDeleayed
。您必须提供一个可运行到execut的值和延迟时间(以毫秒为单位)。
Runnable
将在UI线程上执行

rollButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // whatever you would like to implement when or after clicking rollButton
            }
        };
        rollButton.postDelayed(runnable, 5000); //Delay for 5 seconds to show the result
}
试试下面的方法

rollButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // whatever you would like to implement when or after clicking rollButton
            }
        };
        rollButton.postDelayed(runnable, 5000); //Delay for 5 seconds to show the result
}

延迟一段时间后,您可以使用Handle发布在runnable中定义的任务

使用这个
内部活动定义

Handler hand = new Handler(); 
并在runnable中定义任务,如下所示

Runnable run = new Runnable() { 
    @Override 

    public void run() { 

      **your Task here.......**
    } 

}; 
在点击事件中

btnStartShow.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            hand.postDelayed(run,3000); // For delay three seconds
        }
    });
在适当的地方调用下面的句子,也可以删除所有挂起的消息

hand.removeCallbacksAndMessages(null); 

延迟一段时间后,您可以使用Handle发布在runnable中定义的任务

使用这个
内部活动定义

Handler hand = new Handler(); 
并在runnable中定义任务,如下所示

Runnable run = new Runnable() { 
    @Override 

    public void run() { 

      **your Task here.......**
    } 

}; 
在点击事件中

btnStartShow.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            hand.postDelayed(run,3000); // For delay three seconds
        }
    });
在适当的地方调用下面的句子,也可以删除所有挂起的消息

hand.removeCallbacksAndMessages(null); 
可能的重复可能的重复