【问题标题】:Android Textview not UpdatingAndroid Textview 不更新
【发布时间】:2012-11-30 18:57:53
【问题描述】:

每个人。 我正在尝试为 Android 制作一个基本的大亨游戏 我正在尝试使用计时器每 5 秒增加一次文本视图的值, 但是文本视图没有更新。 到目前为止,这是我的代码:

public class Town extends Activity implements OnClickListener {
Timer timer;
TimerTask task;
TextView goldTV;
TextView woodTV;
TextView foodTV;
TextView stoneTV;
TextView cashTV;
int gold = 20;
int wood = 20;
int food = 20;
int stone = 20;
int cash = 200;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_town);
    goldTV = (TextView) findViewById(R.id.textView1);
    woodTV = (TextView) findViewById(R.id.TextView01);
    foodTV = (TextView) findViewById(R.id.TextView02);
    stoneTV = (TextView) findViewById(R.id.TextView03);
    cashTV = (TextView) findViewById(R.id.TextView04);
    timer = new Timer();
    task = new TimerTask() {

        @Override
        public void run() {
            gold++;
            goldTV.setText(gold);
            try {
                this.wait(2000);
            }
            catch (InterruptedException e){
            }
        }

    };
}
@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub

}

}

【问题讨论】:

    标签: android multithreading timer textview


    【解决方案1】:

    在您的run() 方法中

    @Override
    public void run() {
              gold++;
              goldTV.setText(gold);
    
              try {
                    this.wait(2000);
              }
              catch (InterruptedException e){
    
              }
    }
    

    你打电话给setText(int resId)而不是setText(CharSequence c);

    要显示实际整数gold,请将其从int 转换为String

    String goldStr = String.valueOf(gold);
    
    goldTV.setText(goldStr);
    

    【讨论】:

      【解决方案2】:

      您的问题是您正在更改 UI 线程以外的其他内容上的文本。更好的是在 UI 线程上运行它。另外,您应该将您的数字转换为字符串,否则 Android 会认为您正在寻找资源 ID。将它们放在一起,然后...

      task = new TimerTask() {
      
          @Override
          public void run() {
              gold++;
              runOnUiThread(new Runnable(){
                 public void run(){
                  goldTV.setText(""+gold);
                 }
              });
              try {
                  this.wait(5000);
              }
              catch (InterruptedException e){
              }
          }
      
      };
      

      或者更好的是,您可以使用处理程序,如下所示:

      Handler handler = new Handler();
      Runnable task=new Runnable(){
         public void run(){
            handler.postDelayed(this,5000);
            goldTV.setText(""+gold);
         }
      });
      handler.postDelayed(task,5000);
      

      【讨论】:

        【解决方案3】:

        TimerTask 应该与 Timer 对象一起使用。在您的代码中,您永远不会运行任务。

        编辑: 试试这个:

        goldTV.postDelayed(new Runnable() {
        
                    @Override
                    public void run() {
                        gold++;
                        goldTV.setText(gold+"");
                        goldTV.postDelayed(this,2000);
                    }
                }, 2000);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-24
          • 1970-01-01
          • 2011-10-20
          相关资源
          最近更新 更多