我正在尝试从另一个Java文件访问一个方法,该方法更改UI中的文本字段。 在Game.java(后台的普通Java文件)中,我有一些随时间变化的静态变量。我希望这些变量的更改能够反映在实际的UI中。因此,我试图访问DisplayMessageActivity.java中的方法“changeName”,它将反映相应的更改(display_message_activity.xml)。
这是我试图从Game.java调用的DisplayMessageActivity.java中的方法
public void changeName() {
TextView text = (TextView) findViewById(R.id.petname);
text.setText("" + Game.name);
}
要从Game.java调用DisplayMessageActivity.changeName()
,我必须将其更改为静态方法。
public static void changeName() {
TextView text = (TextView) findViewById(R.id.petname);
text.setText("" + Game.name);
}
但这样做会给我一个错误“无法从静态上下文访问非静态方法”for“findViewByID”。
我甚至尝试在Game.java中创建一个DisplayMessageActivity.java实例来访问“changeName”方法而不使其成为静态。但是,它会在TextView text = (TextView) findViewById(R.id.petname);
如何解决此问题?
答案 0 :(得分:0)
自行创建DisplayMessageActivity
的静态引用,并在onCreate()
中初始化。
public class DisplayMessageActivity {
DisplayMessageActivity instance;
@Override
public void onCreate() {
...
instance = this;
...
}
}
然后从Game.java您可以使用以下方法访问非静态方法:
DisplayMessageActivity.instance.changeName();
编辑:顺便说一下,您的NPE正在被抛出,因为您创建了一个新的DisplayMessageActivity实例,而不是您实际使用的实例。