java - 在java中使用超出范围的变量

标签 java scope handler

你好,我想使用一个变量并捕获另一个内部作用域中的一些数据,并将其用于主作用域中的其他位置,但我的问题是当我在内部作用域中设置变量时,它将被忘记超出范围。

public class ...{
   static TextView txt1;
   static String i="Z0";

   static Handler UIupdater = new Handler() {
      @Override
      public void handleMessage(Message msg) {              
        //some data
            i ="Z1";
      }
   };

   txt1 = (TextView) findViewById(R.id.txt1);
   txt1.setText(i+"");//still get "Z0"

}

我想查看“Z1”,但它显示“Z0”。 解决办法是什么?

最佳答案

问题是 txt1.setText(i+""); 行在加载类时运行,而 i ="Z1"; 行在处理程序实际收到消息之前不会运行 - 为时已晚,无法影响 txt1

解决方案是将 i = "Z1" 移动或复制到之前运行的程序的一部分,或者移动或复制 txt1.setText(i+"") ; 到稍后运行的程序的一部分。例如:

  public void handleMessage(Message msg) {
      i = "Z1";
      txt1.setText(i);
  }

关于java - 在java中使用超出范围的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20727731/

相关文章:

c++ - 在 main() 中全局声明的函数不在 qt widget slot 的范围内

api - 如何为请求添加 if 语句不包含 header 然后拒绝

java - EhCache Spring优化

java - 当我安装了 Java 7 时,cassandra 2 提示 Java 7

java - 使 Intellij IDEA 在具有 IDE 支持的 Java 5 6 7 语言级别允许 lambda

javascript - Javascript 中的类和作用域

maven - 使用 ivy 从 Maven 存储库中解析特定范围

java - UpdateHandler,只有当触发器为真时才做一件事,Android

java - setOnItemSelectedListener 上下文

Java 洪水填充问题