gpt4 book ai didi

java - 无法从静态上下文引用 FindViewById

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:57 24 4
gpt4 key购买 nike

我正在尝试从另一个 Java 文件访问一个 Activity 的方法,该方法会更改 UI 中的文本字段。在 Game.java(后台的普通 Java 文件)中,我有一些静态变量,它们会随着时间的推移而发生变化。我希望这些变量的变化能够反射(reflect)在实际的用户界面中。因此,我尝试访问 DisplayMessageActivity.java 中的方法“changeName”,该方法将反射(reflect)相应的更改(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);
}

但是这样做会给我一个错误“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();

编辑:顺便说一句,您的 NPE 被抛出是因为您创建了一个新的 DisplayMessageActivity 实例,而该实例不是您实际使用的实例。

关于java - 无法从静态上下文引用 FindViewById,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31170882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com