2015-09-28 82 views
0

我刚开始使用Android的发展,我被困在此:如何从静态上下文中引用非静态方法'findViewById'?

static Handler h = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) { 
     TextView buttonmain = (TextView)findViewById(R.id.buttonmainid); 
     if(buttonmain.getText()=="Text1") 
      buttonmain.setText("Text2"); 
     else 
      buttonmain.setText("Text1"); 
    } 
}; 

这给有关findViewById的静态上下文内访问()方法的错误。

+1

为什么'Handler'必须是静态的? –

+0

你为什么需要处理程序? – Blackbelt

+0

防止内存泄漏。 @ mr.icetea – fatehfox

回答

2

我认为你不应该让你的处理程序在这种情况下是静态的。事实上,非静态处理程序确实会造成内存泄漏,但并非总是如此。如果您刚刚开始Android开发,那么您可能不会遇到导致内存泄漏的场景。

当您将消息发送到您的处理程序时,该问题主要发生在类被销毁之前未处理的情况下。换句话说,对于一个内存泄漏发生以下有发生:

  1. 创建实例
  2. 创建处理
  3. 发送消息到处理器
  4. 消灭阶级
  5. 处理程序处理的消息。

在这种情况下会出现内存泄漏。但我非常怀疑这会发生。

但是,要回答你的问题,一个简单的方法来做到这一点是添加以下到您的类:

static MyClass instance; 

,并在构造函数中:

MyClass.instance = this; 

要格外小心,这尽管如此,当你得到同一个类的多个实例时,这将永远不会工作,所以你可能想看看单身人士。

0

你需要和Activity的实例与contentView从你想要得到一个视图。

但是...看着你的代码,我认为你应该直接传递TextView实例。

希望这会有所帮助。

相关问题