如何暂停循环并等待用户单击

时间:2020-07-21 07:34:50

标签: java for-loop button wait

我正在创建一个测验应用程序,在其中随机生成任务,但是我不知道如何等待用户单击for循环。我尝试这样做:

    final Integer min=1;
    final Integer max=100;
    for (int i = 0; i<5; i++){
        button_check3.setVisibility(View.VISIBLE);
        button_next3.setVisibility(View.INVISIBLE);
        final int x = new Random().nextInt(max - min)+min;
        final int y = new Random().nextInt(max-x - min)+min;
        task3.setText(x + " + " + y + " ="); //set task
        final  int zbroj = x+y;

        button_check3.setOnClickListener(new View.OnClickListener() { //check user answer
            @Override
            public void onClick(View v) {
                button_check3.setVisibility(View.INVISIBLE);
                button_next3.setVisibility(View.VISIBLE);
                String user_answer=answer3.getText().toString();
                if (user_answer.equals(zbroj)){
                    check3.setImageResource(R.drawable.true_);
                }
                else {
                    check3.setImageResource(R.drawable.wrong_);
                }
            }
        });
        button_next3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //continue for loop
            }
        });
    }

我要:

  • 生成任务
  • 等待用户单击检查按钮并检查答案
  • 等待用户单击下一步按钮
  • 继续循环

我想重复五遍。 我以前看过这个问题,但没有找到我需要的东西。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以做下一个:

class LoopActivity : AppCompatActivity() {

    val button1: Button = findViewById()
    val button2: Button = findViewById()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        setContentView(/*layout*/)
        imitationLoop(false)
    }

    fun imitationLoop(needBreak: Boolean) {
        if (!needBreak) {
            someCode1()
            button1.setOnClickListener {
                button1.setOnClickListener { }
                someCode2()
                button2.setOnClickListener {
                    button2.setOnClickListener { }
                    imitationLoop(/*conditionBreak*/)
                }
            }
        }
    }

    fun someCode1() {
        //somecode
    }
    fun someCode2() {
        //somecode
    }
}

是递归。并且您需要中断递归的条件。 如果您想要外观(​​int i = 0; i <10; i ++):

class LoopActivity : AppCompatActivity() {

    val button1: Button = findViewById()
    val button2: Button = findViewById()
    var i: Int = 0
    var max: Int = 10

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(/*layout*/)
        imitationLoop(false)
    }

    fun imitationLoop(needBreak: Boolean) {
        if (!needBreak) {
            someCode1()
            button1.setOnClickListener {
                button1.setOnClickListener { }
                someCode2()
                button2.setOnClickListener {
                    button2.setOnClickListener { }
                    imitationLoop(i++ < max)
                }
            }
        }
        else {
            i = 0
        }
    }

    fun someCode1() {
        //somecode
    }
    fun someCode2() {
        //somecode
    }
}