سلام و روزتون بخیر ... دوستان من کد متد notifyMusicChange رو دقیقا مشابه کد استاد پیاده کردم :
public void notifyMusicChange(Music newMusic) { int index = musicList.indexOf(newMusic); if(index != -1){ if(index != playingMusicPos){ notifyItemChanged(playingMusicPos); playingMusicPos = index; notifyItemChanged(playingMusicPos); } } }
و توی متد onBindMusic هم به صورت زیر :
if(getAdapterPosition() == playingMusicPos){ music_effect.setVisibility(View.VISIBLE); }else { music_effect.setVisibility(View.GONE); }
مقدار اولیه playingMusicPos هم 1- هست . ولی مشکلی که هست ، برای آهنگ اول که اولین آهنگ لیست هست انیمیشن رو نمایش میده و آهنگ دوم هم نمایش میده ولی برای آهنگ سوم خیر نمایش نمیده و همچنین وقتی روی آهنگ اول بر میگردم باز انیمشین رو نمایش نمیده ولی روی آهنگ دوم بعضی مواقع نشون میده بعضی مواقع خیر ... دیباگ کردم کد رو ببینم مشکل از کجاست ، و فهمیدم مقادیر playingMusicPos و AdapterPosition به درستی مقدار دهی نمیشن . و حتی یه بار دیباگ کردم واسه اینکه از آهنگ دوم برم به آهنگ اول باید بعد از playingMusicPos = index مقدار playingMusicPos به 0 تغییر میکرد چون index صفر بود ولی تغییر نکرد و همون 1 موند!!! کسی میدونه مشکل از کجاست؟
راستش من اساس کار notifyItemChange رو متوجه نمیشم ... اول فکر میکردم با هربار صدا زدن این تابع ، مقدار AdapterPosition آپدیت میشه به مقداری که به آرگومانش میدیم و اینکه هربار صدا زده میشه باید یه دور onBindViewHolder صدا زده بشه و در کل تغییرات آداپتر رو سرچ کنه و آپدیت کنه ... ینی انتظار داشتم چون اینجا دوبار صدا زده میشه این تابع ، دو بار هم دستورات زیر چک بشن ،
if(getAdapterPosition() == playingMusicPos){ music_effect.setVisibility(View.VISIBLE); }else { music_effect.setVisibility(View.GONE); }
ولی اینطوری نبود و وقتی دیباگ کردم واسه موزیک اول یه بار چک شد واسه موزیک دوم و سوم و به بعد دوبار !!! ... جریان چیه کلا قاطی کردم کسی میتونه توضیح بده ممنون میشم؟