I have a weird problem. I switched to RecyclerView from ListView and I can't refresh or notify of change in my ListView. I tried calling Item.this.notifyDataSetChanged(); and other methods to refresh View but it doesn't work. Instead RecyclerView is refreshed when I scroll(regardless of direction). How can I notify my RecyclerView when there is a change?
CODE:
@Override public void onBindViewHolder(Ids holder, final int position) { rowItemClass = (ListViewRow) rowItems.get(position); Log.e("swag", "OYOYOYOYOYO"); if (Globals.isPlaying && Globals.pos == position) { if (pausedSamePos == true) { holder.pauseed_play.setVisibility(View.VISIBLE); holder.playing_pause.setVisibility(View.GONE); } else { holder.pauseed_play.setVisibility(View.GONE); holder.playing_pause.setVisibility(View.VISIBLE); } holder.song_currenttime_sb.setActive(); holder.song_duration.setVisibility(View.INVISIBLE); holder.song_duration_sb.setVisibility(View.VISIBLE); holder.seekbar.setActive(); } else { holder.seekbar.setInactive(); holder.song_currenttime_sb.setInactive(); holder.song_icon.setImageResource(rowItemClass.getImageId()); holder.song_duration_sb.setVisibility(View.INVISIBLE); holder.song_duration.setVisibility(View.VISIBLE); holder.pauseed_play.setVisibility(View.GONE); holder.playing_pause.setVisibility(View.GONE); } sharedPreference = new SharedPreference(); holder.song_duration.setTypeface(Globals .getTypefaceSecondary(context)); holder.song_duration_sb.setTypeface(Globals .getTypefaceSecondary(context)); holder.song_name.setTypeface(Globals.getTypefacePrimary(context)); holder.song_currenttime_sb.setTypeface(Globals .getTypefaceSecondary(context)); holder.song_name.setText(rowItemClass.getTitle()); holder.song_duration.setText(rowItemClass.getDesc()); holder.song_duration_sb.setText(rowItemClass.getDesc()); holder.favorite.setTag(position); holder.song_currenttime_sb.setTag(position); holder.seekbar.setTag(position); holder.clickRegister.setTag(position); holder.song_icon.setTag(position); holder.song_name.setTag(position); holder.song_duration.setTag(position); holder.song_duration_sb.setTag(position); holder.more_options.setTag(position); // int task_id = (Integer) holder.seekbar.getTag(); final Ids finalHolder = holder; holder.clickRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { if ((Globals.isPlaying.booleanValue()) && (Globals.pos == position)) { pausePlaying(); } else { Globals.stopPlaying(); pausedSamePos = false; Globals.pos = position; Globals.isPlaying = true; Item.this.notifyDataSetChanged(); Globals.mp = MediaPlayer.create(context, Integer .valueOf(Item.this.songPos[position]) .intValue()); Globals.mp.start(); Globals.pos = position; Globals.isPlaying = Boolean.valueOf(true); Item.this.notifyDataSetChanged(); Globals.mp .setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion( MediaPlayer mpOnComplete) { mpOnComplete.release(); Globals.isPlaying = false; pausedSamePos = false; Globals.isPlaying = Boolean .valueOf(false); finalHolder.menu_options .startAnimation(new ViewExpandAnimation( finalHolder.menu_options)); Item.this.notifyDataSetChanged(); } }); } } catch (Exception localException) { } } }); holder.clickRegister .setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { Globals.stopPlaying(); Item.this.notifyDataSetChanged(); return true; } }); }
Item? Have you tried using onlynotifyDataSetChanged();in place ofItem.this.notifyDataSetChanged();.