2015-04-03 42 views
-1

嗨,对不起我的英文! :) 我想通过随机数在3秒后更改文本视图的文本,但它只是显示最后一个数字,而我没有在文本视图中看到最后一个数字如何更改textview的文字不止一个

我该怎么办?

谢谢... :)

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.TextView; 


public class TestActivity extends Activity { 

    int rand; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final TextView txtShow = (TextView) findViewById(R.id.txtShow); 
     Handler handler = new Handler(); 
     for (int i = 0; i < 5; i++) 
     { 
      rand = (int) (Math.random() * 9); 

      handler.postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        txtShow.setText("" + rand); 

       } 
      }, 3000); 

     } 

    } 
} 

回答

1

你不需要一个循环。在这种情况下,你可以使用postDealyed重新发布可运行在UI线程队列:

公共类测试活动延伸活动{

int rand; 
int counter; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    final TextView txtShow = (TextView) findViewById(R.id.txtShow); 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       if (counter > 4) { 
        handler.removeCallbacks(this); 
        return; 
       } 
       ++counter; 
       rand = (int) (Math.random() * 9); 
       txtShow.setText("" + rand); 
       handler.postDelayed(this, 3000); 
      } 
     }, 3000); 
    } 
} 

当计数器达到5,removeCallbacks取消所有可运行仍然存在于处理队列并返回。否则计数器增加,handler.postDelayed添加到处理程序队列的可运行,

0

我认为这应该工作。

private Handler handler; 
private TextView txt; 

/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    handler = new Handler(); 
    txt = (TextView) findViewById(R.id.txt); 
    new Thread(new Task()).start(); 
} 

class Task implements Runnable { 
    @Override 
    public void run() { 
     for (int i = 0; i <= 5; i++) { 
      try { 
       Thread.sleep(3000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        int rand = (int) (Math.random() * 9); 
        txt.setText("" + rand); 
       } 
      }); 
     } 
    } 
} 
0

的问题是,所有的Runnable s表示正在改变TextView被彼此之后立即执行;更改速度如此之快以至于看不到中间值,而只能看到最终值。

要解决您的问题,请将postDelayed()中的延迟从3000更改为3000 * i。这将确保更新在每个之间以3秒为间隔,而不是仅在onCreate()完成(因为它现在)之后3秒执行所有更新。

对于这样的事情,您可能还需要查看Timerhttp://developer.android.com/reference/java/util/Timer.html

相关问题