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

时间:2013-07-04 08:13:23

标签: android wait runnable

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

相反,我希望活动在计算机移动之前等待。我经常环顾四周,发现等待涉及使用一个线程,但我没有实现它而没有我的应用程序崩溃

我尝试宣布一个帖子:

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

按钮的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秒?

4 个答案:

答案 0 :(得分:3)

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

使用这个 内部活动定义

Handler hand = new Handler(); 

并像这样在中定义您的任务

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

答案 1 :(得分:2)

您可以使用Handler.postDeleayed。您必须提供Runnable执行和延迟时间(以毫秒为单位)。 {0}将在UI线程上执行

答案 2 :(得分:1)

使用CountDownTimer:

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();

答案 3 :(得分:0)

尝试以下方法,

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
}