下面是顯示音軌列表的listview適配器的代碼。每個列表項都有播放和停止圖標以播放和停止播放。我遇到的問題當我點擊播放按鈕時,該曲目只能在第一次播放。之後,如果我通過點擊停止按鈕停止播放,嘗試播放任何曲目,它都不會播放。通過吐司消息,我發現了該播放器。 img1.setOnClickListener()方法確實被調用,但onPrepared()方法不會在第二次或之後單擊播放按鈕時被調用。但是,第一次調用onPreredred()方法時,爲什麼第一次播放曲目時時間..使用MediaPlayer類播放音頻(僅在第一次播放音軌時)
如果我把mMediaPlayer=new MediaPlayer();
裏面的onClick()方法holder.img1.setOnClickListener
上述問題確實得到解決,但然後單擊多播放按鈕開始播放在同一時間多個軌道,我不想.. 這裏是代碼.. holder.img1
是播放圖標和holder.img2
是停止圖標
SoundCloudAdapter
public class SoundCloudAdapter extends BaseAdapter{
private MediaPlayer mMediaPlayer;
private Context context;
private ArrayList<SoundCloud> soundcloudList;
public SoundCloudAdapter(Context context, ArrayList<SoundCloud> soundcloudList)
{
this.context=context;
this.soundcloudList = soundcloudList;
mMediaPlayer=new MediaPlayer();
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public int getCount()
{
return soundcloudList.size();
}
@Override
public Object getItem(int position)
{
return soundcloudList.get(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
final ViewHolder holder;
if (convertView == null){
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.soundcloud_item, null);
holder.textview = (TextView) convertView.findViewById(R.id.title);
holder.textview2 = (TextView) convertView.findViewById(R.id.id);
holder.textview3 = (TextView) convertView.findViewById(R.id.download);
// holder.btn = (Button) convertView.findViewById(R.id.button);
holder.img1 = (ImageView) convertView.findViewById(R.id.play2);
holder.img2 = (ImageView) convertView.findViewById(R.id.pause);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.textview.setText(soundcloudList.get(position).getTitle());
holder.textview2.setText(soundcloudList.get(position).getId());
holder.textview3.setText("Play Count : "+soundcloudList.get(position).getDownload());
if(soundcloudList.get(position).getPlaying())
{
holder.img1.setVisibility(View.GONE);
holder.img2.setVisibility(View.VISIBLE);
}
else
{
holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.GONE);
}
holder.img1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(final View v)
{
Toast.makeText(context,"img1",Toast.LENGTH_LONG).show();
soundcloudList.get(position).setPlaying(true);
try
{
holder.img1.setVisibility(View.INVISIBLE);
holder.img2.setVisibility(View.VISIBLE);
if(mMediaPlayer.isPlaying())
{
Toast.makeText(context,"isplaying",Toast.LENGTH_LONG).show();
mMediaPlayer.pause();
}
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource("http://api.soundcloud.com/tracks/" + soundcloudList.get(position).getId() + "/stream?client_id=xyz");
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
Toast.makeText(context,"prepatre",Toast.LENGTH_LONG).show();
mp.start();
}
});
mMediaPlayer.setOnCompletionListener(
new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
soundcloudList.get(position).setPlaying(false);
holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.INVISIBLE);
}
});
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
holder.img2.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(final View v)
{
Toast.makeText(context,"stop",Toast.LENGTH_LONG).show();;
soundcloudList.get(position).setPlaying(false);
holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.INVISIBLE);
mMediaPlayer.pause();
}
});
return convertView;
}
static class ViewHolder
{
public TextView textview;
public TextView textview2;
public TextView textview3;
public ImageView img1;
public ImageView img2;
public Button btn;
}
}
的SoundCloud
public class SoundCloud {
private String title;
private String kind;
private String id;
private String duration;
private String download;
private boolean isPlaying=false;
public SoundCloud()
{
super();
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getKind()
{
return kind;
}
public void setKind(String kind)
{
this.kind = kind;
}
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
public String getDuration()
{
return duration;
}
public void setDuration(String duration)
{
this.duration = duration;
}
public String getDownload()
{
return download;
}
public void setDownload(String download)
{
this.download = download;
}
public Boolean getPlaying()
{
return isPlaying;
}
public void setPlaying(Boolean isPlaying)
{
this.isPlaying = isPlaying;
}
}
只是周圍的工作:'如果(mMediaPlayer.isPlaying()){ Toast.makeText(背景下, 「IsPlaying模塊」,吐司。 LENGTH_LONG).show(); mMediaPlayer.pause(); mMediaPlayer = new MediaPlayer(); }' –
嘗試在onClick之外移動'setOnPreparedListener'然後? –
你的第一條評論幫助我解決了部分問題..如果我正在播放曲目,然後嘗試播放另一首曲目,那麼上一首曲目會停止,並且我單擊的新曲目將開始播放。這很好..但是如果我通過點擊停止按鈕來停止當前的粘性,並嘗試播放它沒有播放的任何曲目。 –