0

我是 Java 和 Android 开发的新手,我无法修复错误。我想TextView用变量更改 a 的文本,但视图类是静态的。这是代码:

    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;
    }
}

错误是:“无法findViewById(int)从 Activity 类型对非静态方法进行静态引用”

我怎么解决这个问题?

4

1 回答 1

4

现在我要做一个疯狂的猜测:这是一个嵌套在其他类的声明中的类,方法 findViewById() 是顶级类但不是静态的?好吧,如果这是正确的,那就是问题所在。当您定义一个内部类静态时,它就变成了一个单独的顶级类。因为方法 findViewById() 不是静态的,它需要一个顶级声明类的实例对象,但 FirstView 类现在是静态的 - 一个完全独立的类,这意味着要实例化它不需要顶级的实例班级。现在这导致了问题 - FirstView 不需要顶级类的对象,而 findViewById() 确实需要一个。要修复它,请将 FirstView 更改为非静态或将 findViewById() 更改为静态,或者解释您在此代码之外究竟在做什么以及您的目标是什么。

于 2012-07-30T00:14:54.563 回答