2011-11-08 35 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