2012-07-29 166 views
0

我是新来的Java和Android开发人员,我无法修复错误。我想用变量更改TextView的文本,但视图类是静态的。下面的代码:无法对非静态方法进行静态引用 - Android TabbedActivity

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)

我怎样才能解决这个问题?

+0

尝试使用v.findViewById(),看看是否有帮助... – Shark 2012-07-30 17:11:02

回答

4

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

相关问题