2011-12-11 57 views
1

我有一段代碼爲幾個TextView對象設置一個OnClickListener。但是,當我點擊其中一個對象時,它將執行與列表中顯示在其下的所有其他TextView對象關聯的所有操作。代碼:多setOnClickListener()調用導致意外的行爲

TextView wake = (TextView) findViewById(R.id.wake); 
    TextView ringer = (TextView) findViewById(R.id.ringer); 
    TextView nap = (TextView) findViewById(R.id.nap); 
    TextView camera = (TextView) findViewById(R.id.camera); 
    TextView volumes = (TextView) findViewById(R.id.volumes); 
    TextView gallery = (TextView) findViewById(R.id.gallery); 

    wake.setOnClickListener(this); 
    ringer.setOnClickListener(this); 
    nap.setOnClickListener(this); 
    camera.setOnClickListener(this); 
    volumes.setOnClickListener(this); 
    gallery.setOnClickListener(this); 

到目前爲止,我在我的onClick方法如下Switch - Case聲明:

@Override 
public void onClick(View v) { 
    Intent intent; 

    switch (v.getId()) { 

    case R.id.wake: 

    case R.id.ringer: 
     setRingerState(true); 

    case R.id.nap: 

    case R.id.camera: 
     intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     startActivity(intent); 
     this.finish(); 

    case R.id.volumes: 


    case R.id.gallery: 
     intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivity(intent); 
     this.finish(); 

注意,我只有當前實現他們三個。如果我爲gallery選擇TextView,它會觸發其相關操作。但是,如果我選擇camera,它會同時啓動本身和圖庫的操作。如果我選擇ringer,它會改變鈴聲狀態,啓動相機和圖庫。

我猜這事做的事實,我設置了相同的OnClickListener到所有這些對象,但我真的需要做的是這樣的:

ringer.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      setRingerState(true); 

     } 
    }); 

對於每一個?這看起來很難看。我有其他選擇嗎?或者我錯過了什麼?

感謝您的任何幫助。

回答

4

你需要每一個案件進行突破:

case R.id.ringer: 
    setRingerState(true); 
    break; 
case R.id.camera: 
    intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    startActivity(intent); 
    finish(); 
    break; 
// etc 

否則執行剛剛落下通過,所有的功能得到執行。

+0

是的,在你回答之前,我已經得出了這個結論。謝謝,這樣一個愚蠢的錯誤。 – unaligned

相關問題