【问题标题】:Change TextView twice两次更改 TextView
【发布时间】:2015-12-12 13:09:46
【问题描述】:

我想创建一个类似的“进度条”,但带有文本。我想这样做,但不起作用。

 public void changeTextTwice(View v) throws InterruptedException {

    miEdad.setText("example 1");
    Thread.sleep(2000);

    miEdad.setText("example 2");

 }

只显示最后一个 setText。我该怎么做?

谢谢^^

【问题讨论】:

    标签: android multithreading settext


    【解决方案1】:

    您的方法被调用得如此之快,以至于您的眼睛永远看不到第一个 setText。您只会看到最后一个。

    根据您要显示的进度,有不同的解决方案。如果要显示正在下载的文件的进度,请查看 AsyncTask。有几个很棒的教程:https://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/

    【讨论】:

      【解决方案2】:

      您可以使用 android.os.Handler 延迟执行作业。

      public void changeTextTwice(View v){
      
          miEdad.setText("example 1");
      
          new Handler().postDelayed(new Runnable() {
              @Override
              public void run() {
      
                  runOnUiThread(new Runnable() {
                      @Override
                      public void run() {
                          miEdad.setText("example 2");
                      }
                  });
      
              }
         },2000);
      }
      

      否则,如果您想进行下载等操作,可以像这样使用 AsyncTask

         private class DownloadAsync extends AsyncTask<Void, Void, Void>{
              @Override
              protected void onPreExecute() {
                  super.onPreExecute();
      
                  miEdad.setText("example 1");
              }
      
      
              @Override
              protected Void doInBackground(Void... params) {
                  // do your job here
      
                  return null;
              }
      
              @Override
              protected void onPostExecute(Void aVoid) {
                  super.onPostExecute(aVoid);
      
                  miEdad.setText("example 2");
              }
          }
      

      并像这样在你的方法上调用它

      new DownloadAsync().execute();

      请注意,如果您想在 doInBackground() 上调用 setText() 等 UI 方法,您必须像这样使用 runOnUiThread(new Runnable)

              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      // call ui methods here 
                  }
              });
      

      【讨论】:

      • 我的其他评论,如下。我有一个方法并尝试在 run() 内部调用但不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 2012-12-24
      相关资源
      最近更新 更多