تغییر آیتم های RecyclerView کلیک نشده بعد از اسکرول(کارم لنگ اینه) ...
من توی ریسایکلر ویو یه عکس گذاشتم که بعد از کلیک کردن اهنگ رو پخش می کنه و عکس عوض میشه و وقتی اسکرول می کنم یه آیتم دیگه هم در پایین عوض می شه که روش کلیک نکردم ؟ لطفا کمک کنید خیلی گشتم ولی نتونستم جوابی پیدا کنم ؟! این کد آداپتر :
public class RingtoneAdapter extends RecyclerView.Adapter<RingtoneAdapter.RingtoneViewHolder> {
MediaPlayer mediaPlayer;
ObjectAnimator animation;
private Context context;
private List<RingtoneItem> ringtoneItems;
public RingtoneAdapter(Context context, List<RingtoneItem> ringtoneItems) {
this.context = context;
this.ringtoneItems = ringtoneItems;
}
@Override
public RingtoneViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.ringtone_item, parent, false);
return new RingtoneViewHolder(view);
}
@Override
public void onBindViewHolder(final RingtoneViewHolder holder, int position) {
final RingtoneItem ringtoneItem = ringtoneItems.get(position);
holder.downloadCount.setText(String.valueOf(ringtoneItem.getDownload()));
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(context, Uri.parse(ringtoneItem.getUrl()));
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mediaPlayer) {
holder.play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.prepareAsync();
holder.play.setImageResource(R.mipmap.ic_play_circle_filled_black_24dp);
animation.cancel();
holder.progressBar.setVisibility(View.INVISIBLE);
} else {
mediaPlayer.start();
animation = ObjectAnimator.ofInt(holder.progressBar, "progress", 0, 500);
holder.play.setImageResource(R.mipmap.ic_pause_circle_filled_black_24dp);
animation.setDuration(mediaPlayer.getDuration());
animation.setInterpolator(new DecelerateInterpolator());
animation.start();
holder.progressBar.setVisibility(View.VISIBLE);
if (formatDuration(mediaPlayer.getCurrentPosition()) == formatDuration(mediaPlayer.getDuration())){
holder.progressBar.setVisibility(View.INVISIBLE);
}
}
}
});
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return ringtoneItems.size();
}
private void mediaPlayerFromUri(String uri) {
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(context, Uri.parse(uri));
mediaPlayer.prepareAsync();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
public class RingtoneViewHolder extends RecyclerView.ViewHolder {
TextView downloadCount, name;
ImageView play;
RelativeLayout layout;
ProgressBar progressBar;
public RingtoneViewHolder(View itemView) {
super(itemView);
progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar);
downloadCount = (TextView) itemView.findViewById(R.id.downloadRing);
play = (ImageView) itemView.findViewById(R.id.play);
layout = (RelativeLayout) itemView.findViewById(R.id.layout);
}
}
private String formatDuration(long duration) {
int seconds = (int) (duration / 1000);
int minutes = seconds / 60;
seconds %= 60;
return String.format(Locale.ENGLISH, "%02d", minutes) + ":" + String.format(Locale.ENGLISH, "%02d", seconds);
}
}
چرا کسی جواب سوال منو نمیده یعنی کسی توی این انجمن بلد نیست خودم یه کارایی کردم اینکه وقتی روی ایتم کلیک می کنم فقط اون ایتم تغییر کنه ولی بازم وقتی اسکرول می کنم و برمیگرم سر جای اول اون آیتمی رو که کلیک کرده بودم به حالت اولیه برمیگرده؟
public void onBindViewHolder(final RingtoneViewHolder holder, final int position) {
final RingtoneItem ringtoneItem = ringtoneItems.get(position);
holder.downloadCount.setText(String.valueOf(position + 1) + "+ " + ringtoneItem.getId());
if (position + 1 == ringtoneItem.getId()) {
holder.play.setImageResource(R.mipmap.ic_play_circle_filled_black_24dp);
holder.progressBar.setVisibility(View.INVISIBLE);
}else {
holder.play.setImageResource(R.mipmap.ic_pause_circle_filled_black_24dp);
}
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(context, Uri.parse(ringtoneItem.getUrl()));
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mediaPlayer) {
holder.play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.prepareAsync();
animation.cancel();
holder.play.setImageResource(R.mipmap.ic_play_circle_filled_black_24dp);
holder.progressBar.setVisibility(View.INVISIBLE);
} else {
mediaPlayer.start();
animation = ObjectAnimator.ofInt(holder.progressBar, "progress", 0, 500);
selected_item = 1;
animation.setDuration(mediaPlayer.getDuration());
animation.setInterpolator(new DecelerateInterpolator());
animation.start();
holder.play.setImageResource(R.mipmap.ic_pause_circle_filled_black_24dp);
holder.progressBar.setVisibility(View.VISIBLE);
if (formatDuration(mediaPlayer.getCurrentPosition()) == formatDuration(mediaPlayer.getDuration())) {
holder.progressBar.setVisibility(View.INVISIBLE);
}
}
}
});
}
});
خوب این مشکل رو حل کردم با کمک خودم دوستان خیلی کم لطفی می کنن و جواب سوال ها رو نمیدن به این شکل :
ولی الان به مشکلی دارم اینه که نمی دونم اینجوری چطور اهنگ ها رو پخش کنم چون امتحان کردم پخش می شه ولی با دوبار کلیک کردن برنامه فورس کلوز میشه خلاصه اینبار گیر این افتادیم لطفا راهنمایی کنید که چجوری آهنگ مربوط به هر آیتم از لیستم رو پخش کنم ؟
public void onBindViewHolder(final RingtoneViewHolder holder, final int position) {
final RingtoneItem ringtoneItem = ringtoneItems.get(position);
holder.downloadCount.setText(String.valueOf(position + 1) + "+ " + ringtoneItem.getId());
if (ringtoneItems.get(position).isFav()) {
holder.play.setImageResource(R.mipmap.ic_pause_circle_filled_black_24dp);
} else {
holder.play.setImageResource(R.mipmap.ic_play_circle_filled_black_24dp);
}
mediaPlayer = new MediaPlayer();
holder.play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!ringtoneItems.get(position).isFav()) {
holder.play.setImageResource(R.mipmap.ic_pause_circle_filled_black_24dp);
ringtoneItems.get(position).setFav(true);
} else {
holder.play.setImageResource(R.mipmap.ic_play_circle_filled_black_24dp);
ringtoneItems.get(position).setFav(false);
}
}
});
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .