如何从静态上下文中引用非静态方法 '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() 方法的错误。

您需要 Activity 的实例以及您想要从中获取视图的 contentView。

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

希望这对您有所帮助。

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

问题主要发生在您向处理程序发送消息时,这些消息在 class 被销毁之前未被处理。换句话说,要发生内存泄漏,必须发生以下情况:

  1. 创建实例
  2. 创建处理程序
  3. 向处理程序发送消息
  4. 摧毁class
  5. Handler 处理消息。

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

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

static MyClass instance;

在构造函数中:

MyClass.instance = this;

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