아래 목록은 트랙 목록을 표시하는 목록보기 어댑터의 코드입니다. 각 목록 항목에는 재생 및 중지 아이콘이있어서 재생 및 중지 할 수 있습니다. 그 트랙은 내가 재생 버튼을 클릭 할 때만 처음으로 재생됩니다. 그 후에 정지 버튼을 클릭하여 재생을 멈추고 재생할 수없는 트랙을 재생하려고하면됩니다. 토스트 메시지를 통해 그 홀더를 발견했습니다. img1.setOnClickListener() 메서드가 호출되지만 onPrepared() 메서드는 재생 단추를 두 번째로 클릭 할 때 호출되지 않습니다. onPrepared() 메서드가 처음 호출 된 이유는 트랙이 처음 재생 된 이유 시간 ..MediaPlayer 클래스를 사용하여 오디오 재생 (트랙은 처음에만 재생 됨)
mMediaPlayer=new MediaPlayer();
을 onClick() 메서드안에 넣으면위의 문제는 holder.img1
플레이 아이콘을하고 holder.img2
정지 아이콘입니다 .. 코드는 여기에 .. 를 해결됩니까하지만 여러 플레이 버튼을 클릭하면 내가 원하지 않는 동시에 여러 트랙을 재생됩니다
prepareAsync
여러 번 호출하는 것처럼
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;
}
}
사운드 클라우드는
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 = 새 MediaPlayer(); }' –
onClick 외부에서'setOnPreparedListener'를 움직이려고 시도 했습니까? –
ur 첫번째 코멘트는 부분적으로 문제를 해결하는 데 도움이되었습니다. 트랙을 연주하고 다른 트랙을 연주하려고하면 이전 트랙이 중단되고 클릭 한 새로운 트랙이 재생되기 시작합니다. 좋아요. 그렇다면 나는 멈춤 버튼을 클릭하여 현재 압정을 멈추고 연주되지 않는 어떤 트랙을 연주하려고 시도한다. –