如何从静态上下文中引用非静态方法 '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 被销毁之前未被处理。换句话说,要发生内存泄漏,必须发生以下情况:
- 创建实例
- 创建处理程序
- 向处理程序发送消息
- 摧毁class
- Handler 处理消息。
在这种情况下会发生内存泄漏。但我非常怀疑这会发生。
但是,要回答您的问题,一个简单的方法是将以下内容添加到您的 class:
static MyClass instance;
在构造函数中:
MyClass.instance = this;
尽管如此,请务必小心,当您获得相同的多个实例时,这将永远无法正常工作 class,因此您可能需要研究单例。
我刚开始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 被销毁之前未被处理。换句话说,要发生内存泄漏,必须发生以下情况:
- 创建实例
- 创建处理程序
- 向处理程序发送消息
- 摧毁class
- Handler 处理消息。
在这种情况下会发生内存泄漏。但我非常怀疑这会发生。
但是,要回答您的问题,一个简单的方法是将以下内容添加到您的 class:
static MyClass instance;
在构造函数中:
MyClass.instance = this;
尽管如此,请务必小心,当您获得相同的多个实例时,这将永远无法正常工作 class,因此您可能需要研究单例。