I am having a problem where once the user clicks on a sound to play from my ListView, then while that sound is playing they click on another sound, the 2 sounds they clicked play at the same time.
I would like to have the sound that was currently playing, finish, then start the new sound that they most recently clicked.
If someone could help me, that would be much appreciated!
CODE:
ListView BoardList = (ListView) findViewById(R.id.BoardList);
String List[] = {
"Audio1", "Audio2", "Audio3", "Audio4", "Audio5"
, "Audio6", "Audio7", "Audio8", "Audio9"
, "Audio10", "Audio11", "Audio12" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.listcustomize, R.id.textItem, List);
BoardList.setAdapter(adapter);
BoardList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
MediaPlayer mPlayer = null;
if (position == 0) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio1);
mPlayer.start();
}
if (position == 1) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio2);
mPlayer.start();
}
if (position == 2) {
mPlayer = MediaPlayer.create(HodgeMain.this, R.raw.Audio3);
mPlayer.start();
}
if (position == 3) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio4);
mPlayer.start();
}
if (position == 4) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio5);
mPlayer.start();
}
if (position == 5) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio6);
mPlayer.start();
}
if (position == 6) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio7);
mPlayer.start();
}
if (position == 7) {
mPlayer = MediaPlayer
.create(HodgeMain.this, R.raw.Audio8);
mPlayer.start();
}
if (position == 8) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio9);
mPlayer.start();
}
if (position == 9) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio10);
mPlayer.start();
}
if (position == 10) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio11);
mPlayer.start();
}
if (position == 11) {
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio12);
mPlayer.start();
}
Media player playing multiple files at the same time
Try
Declare MediaPlayer mPlayer;
common for all
Like
BoardList.setAdapter(adapter);
MediaPlayer mPlayer;
then use mPlayer.release();
if (position == 0) {
if(mPlayer!=null)
{
mPlayer.release();
mPlayer=null;
}
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.Audio1);
mPlayer.start();
}
.
.
.
.
if(position==N)
{
if(mPlayer!=null)
{
mPlayer.release();
mPlayer=null;
}
mPlayer = MediaPlayer.create(HodgeMain.this,
R.raw.AudioN);
mPlayer.start();
}
About release():
Releases resources
associated with this MediaPlayer object
.
It is considered good practice to call this method when you're done using the MediaPlayer
.
In particular, whenever an Activity of an application is paused (its onPause() method is called), or stopped (its onStop() method is called)
, this method should be invoked to release the MediaPlayer object
, unless the application has a special need to keep the object around.
PS. i have tried with release()
which is working fine !
Example: which is working for me
try {
if (position == 1) {
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
mPlayer = MediaPlayer.create(MainActivity.this, R.raw.all);
mPlayer.start();
}
if (position == 2) {
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
mPlayer = MediaPlayer.create(MainActivity.this, R.raw.all2);
mPlayer.start();
}
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With