2013-03-24 45 views
0

所以現在我正在整理一些代碼,並且我還有很多其他/ ifs按鈕,並想知道什麼是一種很好的方法來做到這一點,並使其更整潔?Android更好的方法來做按鈕點擊?

所以我喜歡12個按鈕,每個按鈕播放聲音並在點擊時改變顏色。我有一個方法,但我想知道是否有一個好方法來檢測按鈕,而不是if/else?

public void onClick(View v) { 
    int id = v.getId(); 
    changeToWhite(); 
    if (id == R.id.a_button) { 
     currentButton(a, 81); 
    } else if (id == R.id.aSharp_button) { 
     currentButton(aSharp, 82); 
    } else if (id == R.id.b_button) { 
     currentButton(b, 83); 
    } else if (id == R.id.c_button) { 
     currentButton(c, 72); 
    } 

等...

那麼,有沒有有這個更好的辦法?我知道有很多其他/ ifs是壞的,所以我想嘗試改進它。 謝謝!

+0

對於初學者,您可以使用'switch'語句。 – 323go 2013-03-24 02:39:51

回答

2

您可以改用「switch-case」。

>

public void onClick(View v) { 
switch(v.getId()) 
{ 
case R.id.a_button: 
changeToWhite(); 
break; 
case R.id.aSharp_button: 
currentButton(aSharp,82); 
break; 
..... 
default: 
break; 
} 

}

+0

你可以使用開關盒嗎?有人告訴我,它不適用於Android!如果它起作用 – AndyOHart 2013-03-24 02:53:06

+0

Dang命中太快。謝謝! – AndyOHart 2013-03-24 03:03:24

+1

@AndyOHart - 如果您的R.id是在一個庫項目中生成的(它們不是最終的),則切換案例將不起作用,但使用您自己的R.id將在switch語句中正常工作 – ianhanniballake 2013-03-24 03:04:43

1

如何使用一個case語句來代替?

public void onClick(View v) { 
     // Perform action on click 
     switch(v.getId()) { 
     case R.id.a_button: 
      currentButton(a, 81); 
      break; 
     case R.id.aSharp_button: 
      currentButton(aSharp, 82); 
      break; 
     /* 
      and the rest of the cases here. 
     */ 

     } 
    } 
+0

您可以使用大小寫聲明?我被告知你不能在Android上做它們!如果那個作品很棒:)謝謝你! – AndyOHart 2013-03-24 02:53:56

+2

只有當您的項目是庫項目時,才能使用swicth/case。 – 2013-03-24 03:33:23

+0

@布魯諾馬特烏什麼意思到底是什麼意思? – AndyOHart 2013-03-24 11:21:09

1

我假設你使用XML並設置onClick屬性。

更簡單/更整潔的方法是使用anonymous inner classes

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_foo); 

    findViewById(R.id.view_buttonone).setOnClickListener(new OnClickListener(){ 
     public void onClick(View view){ 
      // button one clicked 
     } 
    }); 

    findViewById(R.id.view_buttontwo).setOnClickListener(new OnClickListener(){ 
     public void onClick(View view){ 
      // button two clicked 
     } 
    }); 
} 
1

首先有幾乎沒有處罰使用的if/else嵌套。沒有必要嘗試這個級別的微操作你的應用程序。你將不會從中受益。試着從可讀性的角度考慮更多的優化這一點。

現在,要回答您的問題,可以使用開關/案例結構。

public void onClick(View v) { 
    switch (item.getItemId()) { 

     case R.id.aBar_item1: 
     //Item onClick logic 
     return true; 

     case R.id.aBar_item2: 
     //Item onClick logic 
     return true; 

     case R.id.aBar_item3: 
     //Item onClick logic 
     return true; 

     ... 
    } 
} 
+0

我想要的唯一原因改變這是因爲它是爲了大學,他們說如果他們看到很多if/else的陳述,我們可能會受到很大的懲罰。但對於像這樣的東西,它會點擊按鈕,我不確定是否有更好的方法 – AndyOHart 2013-03-24 11:22:08