我是 Java 和 Android 开发新手,无法修复错误。我想用变量更改 TextView
的文本,但 View 类是静态的。代码如下:
public static class FirstTab extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.first_tab, null);
new Thread() {
public void run() {
MCQuery mcQuery = new MCQuery(serverAddress, 25565);
QueryResponse response = mcQuery.basicStat();
int Onlineplayers = response.getOnlinePlayers();
Log.d("MCQuery", "" + Onlineplayers + " Online Players");
}
}.start();
TextView onlinePlayersView = (TextView) findViewById(R.id.online_players);
onlinePlayersView.setText(Onlineplayers);
return v;
}
}
错误是:“无法从 Activity 类型对非静态方法 findViewById(int)
进行静态引用”
如何解决这个问题?
最佳答案
现在我要大胆猜测:这是一个嵌套类,位于其他类的声明中,并且方法 findViewById() 属于顶级类,但不是静态的? 好吧,如果这是正确的那就是问题所在。 当您定义内部类 static 时,它就变成了一个单独的顶级类。因为方法 findViewById() 不是静态的,所以它需要顶级声明类的实例对象,但类 FirstView 现在是静态的 - 一个完全独立的类,这意味着要实例化它不需要顶级的实例类(class)。现在这导致了问题 - FirstView 不需要顶级类的对象,而 findViewById() 确实需要一个。要修复此问题,请将 FirstView 更改为非静态或将 findViewById() 更改为静态,或者解释一下您在此代码之外到底在做什么以及您的目标是什么。
关于java - 无法对非静态方法进行静态引用 - Android TabbedActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11713928/