从另一个类访问Activity中的UI元素

时间:2012-05-26 10:05:04

标签: java android android-layout

我的代码存在问题

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 - 是的,我搜索了其他类似的问题,但所有这些问题看起来都是一样的,实际上完全不同。

2 个答案:

答案 0 :(得分:1)

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!");
}

使用以下代码调用此类:

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

我希望这一切都是正确的,我必须从内存中做到这一点,因为我没有任何测试环境。至少它应该帮助你朝着正确的方向发展。

答案 1 :(得分:0)

您将需要:

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

您应该在onCreate()的{​​{1}}中拨打以下一行:

ScreenGame