gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:20:33 30 4
gpt4 key购买 nike

我刚刚开始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;

但请务必小心,当您获得同一类的多个实例时,这永远不会很好地工作,因此您可能需要研究单例。

关于java - 如何从静态上下文引用非静态方法 'findViewById'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32817924/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com