等待2次点击事件,直到继续不起作用

时间:2017-08-10 16:19:30

标签: java android

以下情况:

我为Android编写了一个Domino游戏。在游戏开始时,如果不是机器人是起始玩家,用户应该选择两个进入黑板的Dominos。

我的非工作方法概述:

空ArrayList的定义,在每个Domino上附加Click Listener的函数的调用属于用户,后跟一个什么都不做的while循环,应该只是等待用户选择两个多米诺骨牌的机制。这些多米诺骨牌应存储在ArrayList中(将dominos添加到FirstDominosPickerListener中的ArrayList)

代码

在活动中:

 ArrayList<Domino> starterDominos = new ArrayList<Domino>();  

    startingPlayer.chooseStartDominos(starterDominos);

功能:

   public void chooseStartDominos(ArrayList<Domino> starterDominos){   


        ///Every Domino gets a ClickListener
        for (Domino domino : playerSet){
            domino.setOnClickListener(new FirstDominosPickerListener( starterDominos));
        }

        //The idea is to wait until the user has picked two Dominos. With that loop, no UI at all shows up
        while (starterDominos.size()<2){

            Log.v(LOG_TAG," WAIT!!!!");
        }        


    }

问题是while循环。使用循环,没有UI显示,我得到一个空的白色屏幕,尽管代码运行。在logcat中,我得到无限的“等待”消息。不知道为什么。

我尝试过的第二种方法是在活动中调用Timer任务,然后检查是否选择了两个多米诺骨牌(通过列表的大小)starterDominos = startingPlayer.chooseStartDominos(starterDominos);

我意识到这不起作用,因为它在另一个线程中运行,因此,无法访问UI的任何部分。但选择多米诺骨牌的机制奏效了。在run()选出两个多米诺骨牌后,用户界面显示并cancel()结束。

那么为什么while循环会导致这种行为呢?整个方法是错误的,如果是这样,我可以做什么,应用程序等待,直到挑选多米诺骨牌然后继续

2 个答案:

答案 0 :(得分:2)

您的while循环阻止了主UI线程,因此无法在屏幕上绘制或更新任何内容。您需要为用户选择多米诺骨牌时设置一个监听器,然后在用户选择两个多米诺骨牌后继续。

答案 1 :(得分:0)

您可以在活动类“userDominoSelectCount”中使用类变量。它可以是一个初始化为0的短整数字段。

您可以在onCreate方法本身的活动中为多米诺添加onClickListener

domino.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
      ++userDominoSelectCount;
      if(userDominoSelectCount == 2){

        //initiate AI logic
        userDominoSelectCount = 0;
      }
  }
});

您正在进行的操作将阻止主线程,如问题的其他答案中所述。 OnClicklisteners意味着在事件循环中运行,理想情况下不应阻止UI。