我正试图从另一个Java文件访问一个方法,该方法更改UI中的文本字段。在Game.java(后台的普通java文件)中,我有一些随时间变化的静态变量。我希望这些变量中的更改能够反映在实际的UI中。因此,我试图访问DisplayMessageActivity.java中的方法"changeName",它将反映相应的更改(display_message_activity.xml)
这是DisplayMessageActivity.java中的方法,我正试图从Game.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);
}
但这样做会导致"findViewByID"出现错误"无法从静态上下文访问非静态方法"。我甚至尝试在Game.java中创建DisplayMessageActivity.java的实例,以访问"changeName"方法,而不使其成为静态方法。然而,这会在TextView text = (TextView) findViewById(R.id.petname);
上抛出一个nullPointerException
如何解决此问题?
创建一个对DisplayMessageActivity
本身的静态引用,并在onCreate()
中初始化它。
public class DisplayMessageActivity {
DisplayMessageActivity instance;
@Override
public void onCreate() {
...
instance = this;
...
}
}
然后从Game.java您可以访问非静态方法使用:
DisplayMessageActivity.instance.changeName();
EDIT:顺便说一句,您的NPE被抛出是因为您创建了DisplayMessageActivity的新实例,而该实例不是您实际使用的实例。