Toast.makeText仅在Andriod Studio上出现一次

时间:2019-06-23 03:16:17

标签: java android

我使用Toast.makeText打印一个数组的Number。但是,当我在for循环中使用它时。它只打印第一个数字,而没有做其他任何事情。

2 个答案:

答案 0 :(得分:1)

  

重要:Android中的Toast的持续时间有两种:Toast.LENGTH_SHORTToast.LENGTH_LONG,但是它们都比一个循环执行甚至整个循环慢。因此,在这种情况下,系统可能会打印第一个数字并等待,直到Toast消失或覆盖所有现有的Toast,然后打印最后一个数字或一个随机数字。

有几种处理方法:

  • 如果您需要查看自己的数字,可以使用:

    Log.i("My Array Loop", "position: " + position + " value: " + array.get(position));
    
    //check your Logcat for values
    
  • 如果要将它们作为Toa​​st显示给用户,则可以使用HandlerTimer来实现,但是我更喜欢使用Handler,因为它是更有效:

    1. 创建一个帮助器类以提高灵活性:

      public class ToastPrintHelper {
      
      private Context context;
      private ArrayList<Integer> list;
      private int currentPosition = 0;
      
      public ToastPrintHelper(Context context, ArrayList<Integer> list) {
          this.context = context;
          this.list = list;
      }
      
      public void printValuesEvery(final long periodInMillis) {
          final Handler printHandler = new Handler();
      
          //initialize your print runnable 
          Runnable printRunnable = new Runnable() {
              @Override
              public void run() {
      
                      //print your toast
                      Toast.makeText(
                          context,
                         "position :" + currentPosition + " value: " + list.get(currentPosition),
                          Toast.LENGTH_SHORT).show();
      
                      //repeat if there are still items to show
                      if (currentPosition < list.size() -1) {
                          currentPosition++;
      
                          //execute your runnable again but for a delay  
                          printHandler.postDelayed(this, periodInMillis);
                      }
              }
          };
      
          //execute your runnable without delay for the first time
          printHandler.post(printRunnable);
      }
      
      }
      
    2. 以这种方式初始化您的班级:

      ToastPrintHelper printHelper = new ToastPrintHelper(context, list);

    3. 每秒钟打印一次值(1000毫秒)

      printHelper.printValuesEvery(1000);

  • 在这种情况下,我更喜欢将AlertDialogProgressBarTextView结合使用,以使其对用户更加可见并提高UX / UI质量

  

注意:该代码未经测试,但我相信它没有错误。也可以更好地简化它。

快乐编码!

答案 1 :(得分:0)

如果没有延迟,则连续运行的循环无法在视图上执行此类操作。调试代码,然后查看代码是否达到每个迭代编号或Log迭代编号。另外,在每次迭代中显示吐司都会阻塞您的UI线程。您可以使用Handler来延迟查看Toast和迭代次数,如下所示:

handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // Show toast
        Toast.makeText(this, "Iteration Number:" + i, Toast.LENGTH_SHORT).show();
        //Show toast in about 5 seconds
        handler.postDelayed(this, 5000);
    }
}, 5000);