2014-01-15 54 views
0

這是一個帶16個按鈕的簡單定序器,每個按鈕都觸發一個樣本。我的猜測是,這可以用更優雅的方式完成(不要寫16次)。但是如何?避免重複的代碼處理按鈕

@Override 
public void onCheckedChanged(CompoundButton btn, boolean playing) { 
    // TODO Auto-generated method stub 
    if (btn == tgl1) { 
     if (playing) { 
      s1.seekTo(0); 
      s1.start(); 
     } else { 
      s1.pause(); 
     } 

    } 
    if (btn == tgl2) { 
     if (playing) { 
      s2.seekTo(0); 
      s2.start(); 
     } else { 
      s2.pause(); 
     } 

    } 

回答

0

你將不得不添加按鈕到Map<CompoundButton, MediaPlayer>。然後,您可以使用按鈕上的查找來獲取s2sN對象。

map.put(button1, s1); 
map.put(button2, s2); 
// And so on. 

MediaPlayer s = map.get(btn); 
if (playing) { 
    s.seekTo(0); 
    s.start(); 
} else { 
    s.pause(); 
} 
0
  1. 分配標識符給每個按鈕和每個樣品。
  2. 當按下按鈕時,選擇與按鈕中標識符對應的樣本並開始播放。
0

我會創建一個從每個按鈕id到示例的映射,並在啓動時對其進行填充。然後,你可以這樣做:

s = samplesMap.get(btn.getId()); 
if(playing) { 
    s.seekTo(0); 
    s.start(); 
} else { 
    s.pause(); 
} 
0

假定有16個不同的按鈕,你有16個不同的MediaPlayer實例在每個按鈕操作。如果是這樣的一種方式可能是

  1. 創建Hashmap<Button, MediaPlayer>
  2. 對於每個按鈕使用 球員爲