2

我的代码有问题

setContentView(R.layout.game);
TextView text = (TextView) findViewById(R.id.qwe_string);
text.setText("Hello Android");

如果它在活动中,它可以工作,但如果不是,显然,它会给出错误:

The method findViewById(int) is undefined for the type new TimerTask(){}
The method setContentView(int) is undefined for the type new TimerTask(){}

代码在单独的类(不是活动)中的计时器内。完整代码如下。

//main timer task for ingame time processing
static Timer gameTimer = new Timer();
static TimerTask gameTimerTask = new TimerTask() {
    @Override
    public void run() {
        setContentView(R.layout.game);
        TextView text = (TextView) findViewById(R.id.qwe_string);
        text.setText("Hello Android");
    }
};

我试着像那样改变它

ScreenGame.this.setContentView(R.layout.game);
TextView text = (TextView) ScreenGame.this.findViewById(R.id.qwe_string);
text.setText("Hello Android");

但它仍然不起作用:(

PS - 是的,我搜索了其他类似的问题,但所有这些问题虽然看起来都一样,但实际上完全不同。

4

2 回答 2

2
ScreenGame.this.setContentView(R.layout.game);
TextView text = (TextView) ScreenGame.this.findViewById(R.id.qwe_string);
text.setText("Hello Android");

完全一样

setContentView(R.layout.game);
TextView text = (TextView) findViewById(R.id.qwe_string);
text.setText("Hello Android");

错误代码

您应该创建一个父类,它会触发所有其他活动。在该父类中,您可以引用每个子活动,并且可以向每个孩子询问其文本字段:

// In the parent:
child.getTextView().setText("Hello galaxy!");

// with the child method:
TextView getTextView () {
  return (TextView) findViewById(R.id.qwe_string);
}

编辑:更多信息:

我给的代码不好,我没有很好地理解你的问题......我希望我现在这样做,我会尝试纠正自己。

创建一个单独的类,例如MyTimer,它将扩展TimerTask该类:

class MyTimer extends TimerTask {
  // your class
}

创建一个构造函数,将 TextView 作为参数除外,并保存对它的引用。

TextView theTextView;
MyTimer (TextView tv) {
  this.theTextView = tv;
}

现在实施run()

@Override
public void run() {
    setContentView(R.layout.game);
    thetextView.setText("Hello Galaxy!");
}

使用以下代码调用 make 此类:

static TimerTask gameTimerTask = new MyTimer((TextView) findViewById(R.id.qwe_string));

我希望这一切都是正确的,因为我没有任何测试环境,所以我必须凭记忆做到这一点。至少它应该可以帮助您朝着正确的方向前进。

于 2012-05-26T10:12:19.337 回答
0

你会需要:

ScreenGame.this.runOnUiThread( new Runnable(){
  public void run(){
   TextView text = (TextView) ScreenGame.this.findViewById(R.id.qwe_string);
   text.setText("Hello Android");  }
 });

你应该调用以下onCreate()ScreenGame

setContentView(R.layout.game);
于 2012-05-26T10:10:32.727 回答