2014-01-15 3 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>. Затем вы можете использовать поиск на кнопке, чтобы получить объект s2 или sN.

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

Я бы создал карту с каждого идентификатора кнопки на образец и заполнил ее при запуске. Затем, вы можете просто сделать:

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

Если предположить, что у вас есть 16 различных кнопок и у вас есть 16 различных MediaPlayer экземпляров для работы на каждой кнопке. Если это так один из способов может быть

  1. Создать Hashmap<Button, MediaPlayer>
  2. Для каждой кнопки используйте проигрыватель, который
Смежные вопросы