我有一个带有 ListView
的 Fragment
,它是一个声音列表,以这种方式填充:
MediaPlayer mMediaPlayer;
listview.setAdapter(new ListAdapter(getActivity(), tit, desc, songs, filenames, mMediaPlayer));
MediaPlayer 作为参数给出,因为我希望当按下后退按钮或应用程序进入后台时,播放器将停止播放。 所以我在我的 fragment 中重写了 onPause 和 onDestroy 方法,但这不起作用。即使应用程序关闭,声音也会继续播放。这是我的代码:
@Override
public void onDestroy() {
// TODO Auto-generated method stub
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
super.onDestroy();
}
@Override
public void onPause() {
// TODO Auto-generated method stub
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
super.onPause();
}
我在我的 BaseAdapter
类中以这种方式播放声音:
public void playSound2(int pos){
if(isPlaying){
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
isPlaying = false;
}
mMediaPlayer = MediaPlayer.create(context, songs[pos]);
mMediaPlayer.start();
isPlaying = true;
}
你有什么建议吗?谢谢。
最佳答案
我的第一个建议是:不要使用适配器与媒体播放器交互。相反,将一个项目点击监听器附加到您的 ListView ,如下所示
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
...
}});
并在 onItemClick
回调中对媒体播放器执行任何您想要的操作。
话虽如此,您应该在 onclicklistener 内重置媒体播放器,如下所示
try {
mPlayer.reset();
mPlayer.setDataSource(trackToBePlayed); //trackToBePlayed is dependent on the select position
mPlayer.setOnPreparedListener(mPreparedListener);
mPlayer.prepareAsync();
} catch (IOException e) {
} catch(IllegalArgumentException e) {
}
在 mPreparedListener 中,准备好后,就可以了
mPreparedListener = new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
};
这应该足以为您指明正确的方向:)
关于android - 在 BaseAdapter android 中停止媒体播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27005488/