Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android onClick函数中设置延迟_Android_Onclick_Sleep_Delay - Fatal编程技术网

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

如何在Android onClick函数中设置延迟,android,onclick,sleep,delay,Android,Onclick,Sleep,Delay,) 我正在制作一个记忆游戏。我的问题是,每当我第二次点击时,我甚至看不到切换按钮。为了清楚起见,首先单击切换按钮,这样我可以看到它持有的数字,第二次单击另一个切换按钮可以切换它,显示数字,然后继续设置分数+1(如果数字相同),或者如果数字不同,则再次将其反转 下面是我用作onClick函数的代码,我一直在考虑在第二个“if块”-(if(klikniecia==2))中放置某种类型的sleep或delay函数 在此主题上的任何帮助都将不胜感激 public void onClick(View vi

) 我正在制作一个记忆游戏。我的问题是,每当我第二次点击时,我甚至看不到切换按钮。为了清楚起见,首先单击切换按钮,这样我可以看到它持有的数字,第二次单击另一个切换按钮可以切换它,显示数字,然后继续设置分数+1(如果数字相同),或者如果数字不同,则再次将其反转

下面是我用作onClick函数的代码,我一直在考虑在第二个“if块”-(if(klikniecia==2))中放置某种类型的sleep或delay函数

在此主题上的任何帮助都将不胜感激

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;

            }
        }

    }

}
public void onClick(视图){
对于(int i=0;i

}

您永远不应该在UI线程中睡觉(默认情况下,所有代码都在UI线程中运行)-这只会使UI冻结,而不会让某些内容更改或完成。我不能再多提建议了,因为我不懂代码逻辑。

不要在UI线程中休眠。您需要另一个线程来从您的UI线程中查找“唤醒并等待”消息。第二个线程可以在一个正常的睡眠呼叫后进行隐藏。然后,您可以在下次需要隐藏某些内容时保留该线程,或者在每次需要再次延迟时杀死它并快速创建一个新线程


我相信有一些“postFoo”函数在这种情况下可能很有用(从UI线程外部触发UI事件)。

您可以将延迟消息发布到处理程序(带有相关的runnable)并让它更新UI,而不是在onclick中休眠。显然,将其融入应用程序的设计并使其正常工作,但基本思想如下:

//Here's a runnable/handler combo
private Runnable mMyRunnable = new Runnable()
{
    @Override
    public void run()
    {
       //Change state here
    }
 };
然后从onClick向处理程序发送一条延迟消息,指定要执行的runnable

Handler myHandler = new Handler();
myHandler.postDelayed(mMyRunnable, 1000);//Message will be delivered in 1 second.
取决于你的游戏有多复杂,这可能不是你想要的,但它应该给你一个开始

正确工作:

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

为什么人们仍然在代码中使用非英语名称?这使得不会说$language的人很难理解/阅读它。对我来说,在代码中使用变量的波兰语名称更容易,而且当我编写它时,我不会想到其他人会看;-)虽然将来我会考虑使用更复杂的项目:使用英语:-如果我做对了,这个概念是我应该把我希望在Runnabl中延迟的代码的一部分包起来,然后用OnCutter的延迟来引用它。这似乎是个好主意。今天我将尝试这个,但我认为它会起作用:-)在这种情况下,如何将参数传递给runnable
b.setOnClickListener(new OnClickListener() {

    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        final ProgressDialog myPd_ring=ProgressDialog.show(MainActivity.this, "confident checker", "calculating please wait..", true);
        myPd_ring.setCancelable(true);
        new Thread(new Runnable() {  
              public void run() {
                    // TODO Auto-generated method stub


                    try
                    {
                          Thread.sleep(5000);


                    }
                    catch(Exception e){}
                    b.dismiss();
              }
        }).start();


        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
          public void run() {
              Toast.makeText(getApplicationContext(), "today your confident level is 90% ",
                        Toast.LENGTH_LONG).show();

          }
        }, 5000);


    }
});