如何在Android onClick函数中设置延迟

Pio*_*rgo 19 android sleep onclick delay

我正在创建一个记忆游戏.我的问题是,每当我第二次点击时,我甚至看不到切换按钮.要清楚 - 首先点击切换togglebutton,所以我可以看到它保持的数字,第二次点击不同的togglebutton用于切换它,显示数字然后继续设置得分+1如果数字是如果它们不同,或者将它们反转回来.

下面是我用作onClick函数的代码,我一直在考虑在第二个"if block"中放置某种睡眠或延迟函数 - (if(klikniecia == 2)).

任何有关此主题的帮助将不胜感激.

public void onClick(View view) {
for (int i = 0; i < karta.length; i++){
    if (view == karta[i]){
        karta[i].setEnabled(false);
        klikniecia++;
        if (klikniecia == 1){
            kartaID[0]=i;
            kartaWartosc[0]=listaKart.get(i);

        }
        if (klikniecia == 2){
            kartaID[1]=i;
            kartaWartosc[1]=listaKart.get(i);

            //i think, about setting a delay here, so i can see both of the cards, regardles if the're the same or not before reverting them.

            if (czyPara()){
                karta[kartaID[0]].setEnabled(false);
                karta[kartaID[1]].setEnabled(false);
                klikniecia=0;
            }
            else{

                karta[kartaID[0]].setEnabled(true);
                karta[kartaID[0]].toggle();
                karta[kartaID[1]].setEnabled(true);
                karta[kartaID[1]].toggle();
                klikniecia=0;

            }
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

}

Rya*_*ves 51

您可以将延迟消息发布到处理程序(具有关联的runnable),并让它更新UI,而不是在onclick中休眠.显然,这适用于您的应用程序的设计并使其工作,但基本的想法是这样的:

//Here's a runnable/handler combo
private Runnable mMyRunnable = new Runnable()
{
    @Override
    public void run()
    {
       //Change state here
    }
 };
Run Code Online (Sandbox Code Playgroud)

然后从onClick中将延迟消息发布到处理程序,指定要执行的runnable.

Handler myHandler = new Handler();
myHandler.postDelayed(mMyRunnable, 1000);//Message will be delivered in 1 second.
Run Code Online (Sandbox Code Playgroud)

根据你的游戏有多复杂,这可能不是你想要的,但它应该给你一个开始.


Ali*_*adi 34

正确的工作:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    //Do something after 100ms
  }
}, 100);
Run Code Online (Sandbox Code Playgroud)