Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何引用非静态方法&x27;findViewById';从静态上下文?_Java_Android_Static_Static Methods_Android Context - Fatal编程技术网

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指南(此类信息的最佳位置)