2011-11-08 36 views
2

如何定义可在整个活动中使用的变量?我有三个onClick Listene,每个都包含一堆if else语句。一个onClick会导致一组事件发生,另一个onClick使用out.write指令保存计算结果。如果我的代码的save onClick部分知道了onClick例程的其他计算,那么我有问题从内部获取双变量。我一直在看书,寻找答案,但似乎没有任何工作。我正在使用一个断点来停止一个out.write,它包含一个来自我的执行onClick例程的变量,但它们是未知的值。我首先想到的变量需要是全球性的,但我只是需要他们通过整个活动。在整个班级中使用变量

我已经阅读了大量的书籍,并试图理解,但我跳进了Java并写了3000多行。一切工作都可以得到输入,决定输入是什么,并显示结果。我甚至在SD卡上创建一个很好的.xml文件来显示所有的数据结果。问题是,当我尝试在out.write代码中放置一个变量时,变量m1_sqs1_eng在onCreate例程中是未知的。我有我的变量像你的例子定义,但它没有奏效。我的问题的一些代码示例:

public class MyActivity extends Activity { 
    private EditText m1_sqs1; 
    private Spinner m1_sqs1_spinner; 
    private double m1_sqs1_eng; 
    private double m1_sqs1_value; 

    protected onCreate(Bundle savedBundle) { 
     m1_sqs1_spinner = (Spinner) findViewById(R.id.m1_sqs1_spinner); 
     m1_sqs1 = (EditText) findViewById(R.id.m1_sqs1); 

     btnExecute.setOnClickListener(new View.OnClickListener() { 
     if (((m1_sqs1_spinner.getSelectedItem().toString().equals("in")))) { 
     double m1_sqs1_eng = new Double(m1_sqs1.getText().toString()); 
     }); 

    btnSave.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
     m1_sqs1_value = m1_sqs1_eng; 
     out.write (" <Cell ss:StyleID=\"s44\"><Data ss:Type=\"Number\">" + m1_sqs1_value + "</Data><NamedCell ss:Name=\"Print_Area\"/></Cell>\r\n"); 
     }); 
    } 
} 
+0

邮政编码。你在谈论实例变量吗? – Strelok

+0

发布的代码没有清楚地显示错误。该文本引用out.write()调用不能“看到”实例变量,但没有在发布的代码中有out.write()的实际语句。你收到的错误是什么?它在运行时还是编译时?有抛出异常吗?什么是堆栈跟踪?我怀疑隐藏实例变量的本地定义变量是你问题的一部分。 – chubbsondubs

+0

我没有得到任何错误,我只是没有得到out.write中的变量值。我使用断点停止,当我将光标悬停在变量上时,它显示定义但不显示值。 – WmBurkert

回答

4

例如:

public class MyActivity extends Activity { 
    private EditText streetField; 
    private EditText nameField; 

    protected onCreate(Bundle savedBundle) { 
     streetField = findViewById(R.id.streetField); 
     nameField = findViewVById(R.id.nameField); 

     someButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Person person = new Person(); 
       person.setName(nameField.getText().toString()); 
       person.setStreet(streetField.getText().toString()); 
      } 
     }); 
    } 
} 

这里streetField和名称字段都为MyActivity类的实例变量。它们可以在实例方法中定义的任何实例方法,内部类或匿名内部类中使用。您可能想要选择一本Java入门书,因为大部分内容都在这些书中讨论。

http://java.sun.com/docs/books/effective/

2

您应该在父活动中定义类级变量并在onClickListeners中访问它们。

如果此侦听器类是匿名内部类,则可以直接访问此变量。 或者如果这些实现为公共类,那么您可以在创建它们时将活动引用传递给这些侦听器。

+0

类变量是类中的任何方法都可以访问的变量。在声明一个类变量时,你需要遵守两个基本规则:✦你必须将声明放在类的主体中,但不能在任何类方法中放入 。 ✦您必须在声明中包含单词static。静态字出现在变量类型之前。 – WmBurkert

+0

使用类变量(即静态)不是你想要做的。静态变量永久保存在内存中。实例变量在实例的寿命结束时结束,因此它们只在内存中占用内存。类的静态成员在整个应用程序关闭之前不会消失。另外,它们会导致各种初始化问题幻影错误。 – chubbsondubs

+0

我摆脱了静态定义,并且我试图在计算过程中使用变量,现在从EditText和Spinners获取结果,无论如何都是这些信息。感谢你告诉我不该做什么,因为它可能会导致其他问题。 – WmBurkert