【问题标题】:How to show alertdialog when progress bar is full进度条已满时如何显示警报对话框
【发布时间】:2019-09-10 15:38:33
【问题描述】:

我有两个文本视图和一个按钮。我想在重复单击或直到进度条完成时将计数添加到第一个文本视图,然后双击该值以将计数器添加到第二个文本视图。

我已经为第一部分编写了代码,但是当第二部分完成第一个文本视图的进度条时,我遇到了问题。对话框循环播放,无法正常工作。

请指导我应该做什么或告诉我您是否认识该文档。感恩的 或者当progress = 100时如何杀死线程或者如何停止处理程序?

//按钮代码:

TimerGameButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {

        if (progressStatus < 100){

          soccerA();

        }
        if (progressStatus == 100){
          soccerB();
        }


      }
    });

//soccerA 方法:

public void soccerA() {

    NameACounter++;
    txtNameACounter.setText(Integer.toString(NameACounter));
    progressStatus = 0;

    new Thread(new Runnable() {
      @Override
      public void run() {
        while (progressStatus < 100) {
          progressStatus += 1;

          try {
            Thread.sleep(600);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }

          handler.post(new Runnable() {
            @Override
            public void run() {
              TimerGameButton.setProgress(progressStatus);

              tv.setText("next");
              // If task execution completed
              if (progressStatus == 100) {

                // Set a message of completion
                tv.setText("time over!");

                AlertDialog.Builder builder1 = new AlertDialog.Builder(StartLowGame.this);
                builder1.setMessage("Write your message here.");
                builder1.setCancelable(true);

                builder1.setPositiveButton(
                  "Yes",
                  new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                      soccerB();

                    }
                  });

                AlertDialog alert11 = builder1.create();
                alert11.show();


              }
            }
          });
        }
      }
    }).start(); 
  }

//soccerB 方法:

public void soccerB() {

    NameBCounter++;
    txtNameBCounter.setText(Integer.toString(NameBCounter));
    progressStatus = 0;

    new Thread(new Runnable() {
      @Override
      public void run() {
        while (progressStatus < 100) {
          progressStatus += 1;

          try {
            Thread.sleep(600);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }

          handler.post(new Runnable() {
            @Override
            public void run() {
              TimerGameButton.setProgress(progressStatus);

              tv.setText("next");
              // If task execution completed
              if (progressStatus == 100) {

                // Set a message of completion
                tv.setText("time over!");

                AlertDialog.Builder builder1 = new AlertDialog.Builder(StartLowGame.this);
                builder1.setMessage("Write your message here.");
                builder1.setCancelable(true);

                builder1.setPositiveButton(
                  "Yes",
                  new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();

                    }
                  });

                AlertDialog alert11 = builder1.create();
                alert11.show();


              }
            }
          });
        }
      }
    }).start(); 
  }

【问题讨论】:

  • 为什么要在方法中创建线程?哪个文本视图是这个 tv.setText("next");
  • @Muazzamabbas 这只是一个要测试的名字
  • progress = 100 时如何杀死线程并从块中出来?

标签: android button textview progress-bar


【解决方案1】:

@Amir Bakhtiari 将您的 scoreA 方法更改为

public void soccerA() {

        NameACounter++;
        txtNameACounter.setText(Integer.toString(NameACounter));
        progressStatus = 0;

        while (progressStatus < 100) {
            progressStatus += 1;

            try {
                Thread.sleep(600);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            TimerGameButton.setProgress(progressStatus);

            tv.setText("next");
            // If task execution completed
            if (progressStatus == 100) {

                // Set a message of completion
                tv.setText("time over!");

                AlertDialog.Builder builder1 = new AlertDialog.Builder(StartLowGame.this);
                builder1.setMessage("Write your message here.");
                builder1.setCancelable(true);

                builder1.setPositiveButton(
                        "Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                soccerB();

                            }
                        });

                AlertDialog alert11 = builder1.create();
                alert11.show();

            }

        }
    }

并将 ScoreB 方法更改为:

 public void soccerB () {

            NameBCounter++;
            txtNameBCounter.setText(Integer.toString(NameBCounter));
            progressStatus = 0;

            while (progressStatus < 100) {
                progressStatus += 1;

                try {
                    Thread.sleep(600);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                TimerGameButton.setProgress(progressStatus);

                tv.setText("next");
                // If task execution completed
                if (progressStatus == 100) {

                    // Set a message of completion
                    tv.setText("time over!");

                    AlertDialog.Builder builder1 = new AlertDialog.Builder(StartLowGame.this);
                    builder1.setMessage("Write your message here.");
                    builder1.setCancelable(true);

                    builder1.setPositiveButton(
                            "Yes",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    dialog.cancel();
                                }
                            });

                    AlertDialog alert11 = builder1.create();
                    alert11.show();


                }
            }


        }

您的对话框循环而不工作的原因是您每次单击按钮时都在创建新线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2020-01-14
    相关资源
    最近更新 更多