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

时间:2012-07-29 23:47:12

标签: java android

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

    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)进行静态引用

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

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