Java 如何引用非静态方法&x27;findViewById';从静态上下文?
我刚刚开始安卓系统的开发,我被困在这一点上:Java 如何引用非静态方法&x27;findViewById';从静态上下文?,java,android,static,static-methods,android-context,Java,Android,Static,Static Methods,Android Context,我刚刚开始安卓系统的开发,我被困在这一点上: static Handler h = new Handler() { @Override public void handleMessage(Message msg) { TextView buttonmain = (TextView)findViewById(R.id.buttonmainid); if(buttonmain.getText()=="Text1") button
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()方法时出错。您需要使用contentView获取视图的活动的实例 但是。。。查看您的代码,我认为您应该直接传递TextView实例
希望这有帮助 我认为在这种情况下,不应该让处理程序保持静态。事实上,非静态处理程序确实会导致内存泄漏,但并非总是如此。如果您刚刚开始Android开发,您可能不会遇到导致内存泄漏的情况 问题主要发生在向处理程序发送消息时,这些消息在类被销毁之前未被处理。换句话说,要发生内存泄漏,必须发生以下情况:
static MyClass instance;
在构造器中:
MyClass.instance = this;
但是,请务必小心,当您获得同一类的多个实例时,这将永远不会很好地工作,因此您可能需要研究单例。为什么
处理程序必须是静态的?为什么需要处理程序?以防止内存泄漏。这是我在使用它时发现的一个警告。@mr.iceteateText视图是在创建视图和静态视图中定义的,静态方法下的调用static
在类加载时加载,并且视图
可在上下文中使用<当类被初始化时,代码>上下文被初始化。这意味着,您必须等待获取视图,直到活动的上下文可用为止<代码>上下文
将在onCreate()
中可用,因此通常在那里加载视图。我建议您快速浏览Android指南(此类信息的最佳位置)