无法从静态上下文中引用FindViewById



我正试图从另一个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的新实例,而该实例不是您实际使用的实例。

相关内容

最新更新