android - RecyclerView not deleted inside RecyclerView.Adapter -


i have recyclerview adapter based on inflating 2 different card layouts. adapater dynamically updated new cards , therefore each of cards in adapter needs updated well. each of cards, there progressbar showing random generated data.

however, problem im facing when remove 1 of cards in list, reference deleted card not removed (the oncreateviewholder not called , therefore not update views), instead cards left writing on layout of "deleted" card. text on card correct , removes correct item list, progress bar still having old reference old card, makes adding values corresponds deleted card.

to illustrate problem, i'm adding random data each of cards in progressbar depending on movement name. regardless of card, movement card named "open hand" should add random data between 0-20, "close hand" 20-60" , "pronation" 60-100".

here working supposed after adding 3 cards: after inserted 3 cards

but when delete 2 first cards "open hand" , "close hand", "pronation" card left showing data in progress bar corresponds "open hand" data range. why isn't referencing correct? i've tried calling both ondatasetchange(); , notifyitemremoved(pos); after deleted 2 cards

my adapter code:

public class parameteradapter extends recyclerview.adapter<recyclerview.viewholder> {     list<movement> movements;      public parameteradapter() {         this.movements=movementlist;     }      class addcard extends recyclerview.viewholder {         public addcard(view inflate) {             super(inflate);         }     }      class card extends recyclerview.viewholder {         textview movement;         textview channel;         textview remove;         progressbar strength;         textview graph;         linearlayout expandedview;         linechart linechart;         movement mov;         public card(view itemview, movement m) {             super(itemview);             movement = (textview) itemview.findviewbyid(r.id.movementtext);             channel = (textview) itemview.findviewbyid(r.id.channelnametext);             remove = (textview) itemview.findviewbyid(r.id.removecard);             strength = (progressbar) itemview.findviewbyid(r.id.progressbarstrength);             graph = (textview) itemview.findviewbyid(r.id.graphtextbutton);             expandedview = (linearlayout) itemview.findviewbyid(r.id.detailsnr2);             linechart = (linechart) itemview.findviewbyid(r.id.linechartcard);             mov=m;             channel.settext(m.getchannel());             //setup real time graph             setuplinechart(mov, linechart, mov.getid());             // start adding random data graph             startaddingrandomdata();         }          public void startaddingrandomdata() {             new thread(                     new runnable() {                         public void run() {                             while (true) {                                 int generateddata;                                  // depending on type of movement, add different generated random data                                 // (to sure views correctly updated when removed instance)                                 if(mov.getsettingstype().equals(settingsdbhelper.movements_string[0])){                                     // add random generated data between span 0-20                                     generateddata=generaterandomdata(0,20);                                 } else if (mov.getsettingstype().equals(settingsdbhelper.movements_string[1])) {                                     // add random generated data between span 20-60                                     generateddata=generaterandomdata(20, 60);                                 } else {                                     // add random generated data between span 60-100                                     generateddata=generaterandomdata(60, 100);                                 }                                 //set progress bar                                 strength.setprogress(generateddata);                                  // add random generated data graph                                 addentry(mov, linechart, generateddata);                                  try {                                     thread.sleep(300);                                 } catch (interruptedexception e) {                                     e.printstacktrace();                                 }                             }                         }                     }).start();          }     }      public int generaterandomdata(int n1, int n2){         random r = new random();         return r.nextint(n2 - n1) + n1;     }      @override     public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {         view vsetting=null;         view vcard=null;         // if first position, inflate "add movement" card.         if(viewtype==0) {            vsetting = layoutinflater.from(parent.getcontext()).inflate(r.layout.fragment_parameter_cardview, parent, false);            return new addcard(vsetting);        }else if(viewtype>0) {             // otherwise, if it's not first position, inflate "movement card" , create corresponding movement item             vcard = layoutinflater.from(parent.getcontext()).inflate(r.layout.cardview_movement, parent, false);             movement m = movementlist.get(viewtype - 1);             return new card(vcard, m);        }else {          // reason, occurs          return null;        }     }      @override     public void onbindviewholder(recyclerview.viewholder holder,final int position) {         // "add movement" card         if(position==0){             ((addcard)holder).itemview.setonclicklistener(new view.onclicklistener() {                 @override                 public void onclick(view view) {                     intent intent = new intent(getactivity(), addmovement.class);                     startactivityforresult(intent, add_movement);                 }             });          // "movement" item card         } else if(position>0) {             final boolean isexpanded = position == mexpandedposition;             ((card) holder).expandedview.setvisibility(isexpanded ? view.visible : view.gone);             ((card) holder).graph.setactivated(isexpanded);             ((card) holder).graph.setonclicklistener(new view.onclicklistener() {                 @override                 public void onclick(view view) {                     mexpandedposition = isexpanded ? -1 : position;                     notifydatasetchanged();                 }             });              // type of movement             movement m = movementlist.get(position - 1);              // lets real-time graph view created before actual adding data.             m.setchartcreated(1);              //update textviews inside card             ((card)holder).movement.settext(m.getmovement());             ((card)holder).channel.settext(m.getchannel());             ((card)holder).remove.setonclicklistener(new view.onclicklistener() {                 @override                 public void onclick(view view) {                     movement m = movementlist.get(position - 1);                     //remove item list                     remove(m);                     // id , settings type in order update entry                     string id=m.getid();                     string settingstype = m.getsettingstype();                     //update entry                     settingsdb.updatesetting(settingstype,id,"false");                 }             });         }     }      // remove item list     public void remove(movement data) {         int position = movementlist.indexof(data);         movementlist.remove(data);         notifydatasetchanged();         // (+ 1 one compensate first card)         notifyitemremoved(position + 1);      }       @override     public void onattachedtorecyclerview(recyclerview recyclerview) {         super.onattachedtorecyclerview(recyclerview);     }       @override     public int getitemviewtype(int position) {         //return position      return position;     }       @override     public int getitemcount() {         // (+1 compensate first card)         return movementlist.size()+1;     }  } 


Comments

Popular posts from this blog

php - How to add and update images or image url in Volusion using Volusion API -

javascript - IE9 error '$'is not defined -