繁体   English   中英

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

[英]How to reference non-static method 'findViewById' from a static 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()方法的错误。

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

当您将消息发送到处理程序时,在销毁该类之前未对其进行处理的问题通常会出现此问题。 换句话说,要发生内存泄漏,必须发生以下情况:

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

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

但是,要回答您的问题,一种简单的方法是在您的班级中添加以下内容:

static MyClass instance;

并在构造函数中:

MyClass.instance = this;

但是请务必小心,当您获得同一类的多个实例时,这将永远无法正常工作,因此您可能需要研究单例。

您需要在要获取View的位置使用带有contentView的Activity实例。

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM