Reputation: 33
I make several button sounds, but I can't play all button sounds. I have searched a solution, and the answer seems to be that I need to release() and add reset() before. But when I click the button twice, my app error says "unfortunately, the app has stopped".
My code is this:
ImageButton kaa = (ImageButton) findViewById(R.id.kaa);
kaa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(HurufActivity.this);
View view = getLayoutInflater().inflate(R.layout.huruf_ka, null);
ImageButton ka = (ImageButton) view.findViewById(R.id.ka);
ka.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonka.start();
buttonka.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
buttonka.reset();
buttonka.release();
}
});
}})
builder.setView(view);
AlertDialog dialog = builder.create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.show();
}
});
Upvotes: 1
Views: 3114
Reputation: 859
Don't set an OnClickListener inside another OnClickListener.
AlertDialog.Builder builder = new AlertDialog.Builder(HurufActivity.this);
View view = getLayoutInflater().inflate(R.layout.huruf_ka, null);
ImageButton ka = (ImageButton) view.findViewById(R.id.ka);
buttonka.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
if( buttonka != null) {
if( buttonka.isPlaying()) {
buttonka.stop();
}
buttonka.reset();
buttonka.release();
buttonka = null;
}
}
});
ka.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonka.start();
}
});
builder.setView(view);
AlertDialog dialog = builder.create();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.show();
ImageButton kaa = (ImageButton) findViewById(R.id.kaa);
kaa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.show();
}
});
Upvotes: 1