避免重复代码处理按钮

时间:2014-01-15 11:53:25

标签: android button

这是一个简单的音序器,有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();
        }

    }

4 个答案:

答案 0 :(得分:0)

  1. 为每个按钮和每个样本分配一个标识符。
  2. 按下按钮时,选择与按钮中的标识符对应的样本并开始播放。

答案 1 :(得分:0)

我会创建一个从每个按钮id到示例的地图,并在启动时填充它。然后,您可以这样做:

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

答案 2 :(得分: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();
}

答案 3 :(得分:0)

假设您有16个不同的按钮,并且每个按钮上有16个不同的MediaPlayer个实例。如果是这样的话可能是

  1. 创建Hashmap<Button, MediaPlayer>
  2. 对于每个按钮使用 那个球员