2012-07-20 41 views
1

我正在嘗試使用int來打開不同的圖。我希望這個int可以在按下按鈕時更改值,但不會更改。這是我的代碼:不能更改onClick

public class PatientDemographics extends Activity 
{ 
    private GraphicalView mChartView; 
    int num = 1; 
    int tabnum = 0; 
    int finalnum; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tabviews); 

     LinearLayout ll = (LinearLayout) findViewById(R.id.buttons); 

     Button button1 = new Button(this); 
     button1.setText("Disease Type"); 
     ll.addView(button1); 
     button1.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       num = 1; 
       Intent i = new Intent(PatientDemographics.this, TabHelper.class); 
       i.putExtra("num", tabnum); 
       startActivity(i); 
      } 
     }); 

     Button button2 = new Button(this); 
     button2.setText("Gender"); 
     ll.addView(button2); 
     button2.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       num = 2; 
       Intent i = new Intent(PatientDemographics.this, TabHelper.class); 
       i.putExtra("num", tabnum); 
       startActivity(i); 
      } 
     }); 

     Button button3 = new Button(this); 
     button3.setText("Age at Diagnosis"); 
     ll.addView(button3); 
     button3.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       num = 3; 
       Intent i = new Intent(PatientDemographics.this, TabHelper.class); 
       i.putExtra("num", tabnum); 
       startActivity(i); 
      } 
     }); 

     Button button4 = new Button(this); 
     button4.setText("Treatment Status"); 
     ll.addView(button4); 
     button4.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       num = 4; 
       Intent i = new Intent(PatientDemographics.this, TabHelper.class); 
       i.putExtra("num", tabnum); 
       startActivity(i); 
      } 
     });  
    } 
} 

請忽略tabnum。它用於確定所有內容的標籤,這是相同的。此外,我最初創建按鈕與XML,但每個選項卡需要不同數量的按鈕,我不知道如何做到這一點,所以我只是用代碼。

您可以看到,我初始化了num1,然後嘗試在onClick方法內更改它,但它永遠不會更改。如果您需要更多信息,請告訴我。

編輯:

protected void onSaveInstanceState(Bundle outState) 
{ 
     outState.putInt("num", num); 
     super.onSaveInstanceState(outState); 
} 

然後在的onCreate:

super.onCreate(savedInstanceState); 
    if(savedInstanceState != null) 
    { 
     num = savedInstanceState.getInt("num"); 
    } 

回答

0

我認爲可能你是不是驗證NUM正在通過調試程序改變。因爲我在代碼中完成與您完全相同的事情。我會建議在改變num的行上加一個斷點,看看num是否改變。我假設開始活動正在導致你失去num值。

+0

是,startActivity是使我損失了NUM值。你知道我能做什麼來解決這個問題嗎? – Seth 2012-07-23 14:39:53

+0

但是,如果我在startActivity(i)之後移動num = x語句,則num在方法內發生更改。它只是永遠不會停留在onResume()中使用的數字 – Seth 2012-07-23 15:49:34

+0

您有幾個不同的選項。我真的會考慮是否需要再次啓動活動,並且不能只運行更新活動的函數。您也可以使用共享首選項: http://android-er.blogspot.com/2011/01/example-of-using-sharedpreferencesedito.html 您也可以將該變量傳遞給活動並在活動中檢索它如下所示 http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-in-android – 2012-07-23 20:03:43

1

由於按鈕點擊而產生相同類型的新Activity。 在新Activity如果你想在新的Activity使用新值的變量被初始化爲1 ,你應該從Intent得到它,並在ActivityonCreate()方法分配變量。

您應該添加這樣的事情onCreate()

num = (int)this.getIntent().getExtras().get("num"); 
+0

感謝您的建議,但我試圖在同一個PatientDemographics類中使用num,只是在onResume方法中。按鈕點擊的意圖部分工作正常。 – Seth 2012-07-23 14:33:16

+0

如果嘗試在返回到更改其值的初始活動時嘗試讀取num,則由於內存不足,操作系統可能已釋放該對象。在這種情況下,當您返回到該Activity時會重新創建原始Activity對象,並且該對象的狀態將丟失。你可以用類似outState.putInt(「num」,num)的方法實現onSaveInstanceState(Bundle outState)來保留num的值。然後你可以在你的onCreate方法中恢復這個值。 – Eran 2012-07-23 18:55:30

+0

我認爲這是我需要的,但是我並不真正理解如何實現你所說的(我是初學者)。我編輯了這個問題,告訴你我做了什麼。你能告訴我我做錯了什麼嗎?非常感謝你。 – Seth 2012-07-23 20:09:35