我绞尽脑汁在网上四处看看,但我似乎无法找到问题的答案。我设法创建一个播放由自定义数组适配器生成的音频文件的应用程序。我希望当用户离开屏幕时音频停止播放。
如果在活动中创建了媒体播放器,我看到人们使用onStop方法。我是在数组适配器类中创建的,它不允许使用onStop方法。请帮助:)
public class WordAdapter extends ArrayAdapter<Word> {
private MediaPlayer mediaPlayer;
private MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
// Now that the sound file has finished playing, release the media player resources.
releaseMediaPlayer();
}
};
//Define constructor which takes 2 arguments i.e the Context and the list of words.
public WordAdapter(Activity context, ArrayList<Word> words) {
super(context, 0, words);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItem = convertView;
if (listItem == null)
listItem = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
/* Get the item from list of words in the adapter and pass the position as argument*/
Word currentWord = getItem(position);
ImageButton play = (ImageButton) listItem.findViewById(playButton);
final int audioResourceId = currentWord.getAudioResourceId();
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View play) {
mediaPlayer = MediaPlayer.create(getContext(), audioResourceId);
mediaPlayer.start();
// Setup a listener on the media player, so that we can stop and release the
// media player once the sound has finished playing.
mediaPlayer.setOnCompletionListener(mCompletionListener);
}
});
/* Return the generated view */
return listItem;
}
public void releaseMediaPlayer() {
// If the media player is not null, then it may be currently playing a sound.
if (mediaPlayer != null) {
// Regardless of the current state of the media player, release its resources
// because we no longer need it.
mediaPlayer.release();
// Set the media player back to null. For our code, we've decided that
// setting the media player to null is an easy way to tell that the media player
// is not configured to play an audio file at the moment.
mediaPlayer = null;
}
}
}