Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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
Java 我怎样才能让android程序等到按下两个按钮?_Java_Android_Button - Fatal编程技术网

Java 我怎样才能让android程序等到按下两个按钮?

Java 我怎样才能让android程序等到按下两个按钮?,java,android,button,Java,Android,Button,我有一个按钮列表、b1、b2等。每个按钮都有一个onclick方法,可以向数组列表中添加一个数字。我认为增加这一行 while(myArrayList.size()<2){} while(myArrayList.size()您正在UI线程上执行while循环,这就是屏幕没有响应的原因。 我想说的是,检查onClick方法的数组大小,然后在满足条件时运行,运行您正在等待的方法。类似于这样: @Override public void onClick(View v) { switch

我有一个
按钮列表
b1、b2等。
每个按钮都有一个
onclick
方法,可以向
数组列表
中添加一个数字。我认为增加这一行

while(myArrayList.size()<2){}

while(myArrayList.size()您正在UI线程上执行
while
循环,这就是屏幕没有响应的原因。 我想说的是,检查onClick方法的数组大小,然后在满足条件时运行,运行您正在等待的方法。类似于这样:

@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.b1:
            list.add(someNumber);
            break;
        case R.id.b2:
            list.add(otherNumber);
            break;
    }
    if (list.size() == 2) {
        yourWaitingMethod();
    }
}

您正在执行UI线程上的
循环,这就是屏幕没有响应的原因。
我想说的是,检查onClick方法的数组大小,然后在满足条件时运行,运行您正在等待的方法。类似于这样:

@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.b1:
            list.add(someNumber);
            break;
        case R.id.b2:
            list.add(otherNumber);
            break;
    }
    if (list.size() == 2) {
        yourWaitingMethod();
    }
}

我认为问题在于,您的ArrayList最初是空的,除非您的while循环中有向该ArrayList添加元素的内容,否则您将停留在该循环中

如果要在单击两个按钮时执行某些操作,则可以使用两个单独的布尔变量,单击按钮后,这些布尔变量将分别设置为true:

// boolean instance variables
boolean button1Clicked = false, button2Clicked = false;

...

// set the OnClickListeners
button1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        button1Clicked = true;
        doSomething();
    }
});
button2.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        button2Clicked = true;
        doSomething();
    }
});

...

// the method to be called every time you click either button
private void doSomething(){
    if (button1Clicked && button2Clicked){ // but only executes what's inside here unless both buttons were clicked
        // do something
    }
}

希望这能有所帮助!

我认为问题在于,您的ArrayList刚开始是空的,除非您的while循环中有东西向该ArrayList添加元素,否则您将停留在该循环中

如果要在单击两个按钮时执行某些操作,则可以使用两个单独的布尔变量,单击按钮后,这些布尔变量将分别设置为true:

// boolean instance variables
boolean button1Clicked = false, button2Clicked = false;

...

// set the OnClickListeners
button1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        button1Clicked = true;
        doSomething();
    }
});
button2.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        button2Clicked = true;
        doSomething();
    }
});

...

// the method to be called every time you click either button
private void doSomething(){
    if (button1Clicked && button2Clicked){ // but only executes what's inside here unless both buttons were clicked
        // do something
    }
}

希望这有帮助!

这个while循环是在与UI处理程序不同的线程上进行的吗?您可能应该发布您的code@hexafraction,我不知道该怎么说。听起来像是在主/UI线程上运行循环。在代码完成运行之前,它无法显示UI,并且在UI显示之前,它永远不会完成运行,因此您的用户可以单击这两个按钮。简言之,这听起来像是一个无限循环,它会阻止UI显示。这个while循环与UI处理程序在不同的线程上吗?您可能应该发布您的code@hexafraction,我不知道该怎么说。听起来像是在主/UI线程上运行循环。在代码完成之前,它无法显示UI已完成运行,并且它将永远不会完成运行,直到显示UI,以便用户可以单击这两个按钮。简而言之,它听起来像一个无限循环,阻止UI显示。等待方法中应该包含什么?等待方法中应该包含什么?