如何从静态上下文引用非静态方法'findViewById'?

时间:2015-09-28 07:41:34

标签: java android static static-methods android-context

我刚刚开始使用android开发,我对此感到困惑:

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()方法的错误。

2 个答案:

答案 0 :(得分:2)

我认为在这种情况下你不应该让你的处理程序保持静态。实际上,非静态处理程序确实会导致内存泄漏,但总是如此。如果您刚开始进行Android开发,则可能不会遇到导致内存泄漏的情况。

当您在销毁类之前向处理程序发送未处理的消息时,问题通常会发生。换句话说,对于发生内存泄漏,必须发生以下情况:

  1. 创建实例
  2. 创建处理程序
  3. 向处理程序发送消息
  4. 销毁课程
  5. 处理程序处理消息。
  6. 在这种情况下会出现内存泄漏。但我非常怀疑这种情况会发生。

    但是,要回答您的问题,一个简单的方法是将以下内容添加到您的课程中:

    static MyClass instance;
    

    并在构造函数中:

    MyClass.instance = this;
    

    请注意这一点,当你得到同一个类的多个实例时,这将永远不会有效,所以你可能想看看单身。

答案 1 :(得分:0)

您需要具有contentView的Activity和实例,您可以从中获取View。

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

希望这会有所帮助。