java - 无法对非静态方法进行静态引用 - Android TabbedActivity

标签 java android

我是 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/

相关文章:

java - 如何将视频文件 (mp4) 添加到我的 android 应用程序中?

java - Dagger 2 - 如果没有 @Provides 注释的方法则无法提供

java - 删除列表中包含某些单词的项目的有效方法?

java - NoClassDefFoundError : org/apache/http/HttpEntity in Selenium for ChromeDriver?

android - 与 Windows Phone 8 的串行通信

android - 作业调度服务

android - gradle 可以处理无限的子项目深度吗?

java - 命名查询的等效条件查询

java - 我应该使用哪种 OOP 范式?

android - 线程只循环一次