android - RecyclerView Displays only last objects in List -


i trying display data in recyclerview. have created adapter handle recyclerviews different activities. issue facing displaying data appropriately. far can display last elements in list. in case, last candidate each contestedoffice. have attached code both activity , adapter screenshot of output.

my adapter class

public class recycleradapter extends recyclerview.adapter<recyclerview.viewholder> {      private static final string logcat = recycleradapter.class.getsimplename();     private static final int view_type_vote = 0;     private static final int view_type_preview = 1;     private list candidateslist;     private linearlayout checkboxparent;     private voteactivity voteactivity;     private context context;      public recycleradapter(list candidateslist) //generic list     {         this.candidateslist = candidateslist;     }      @override     public int getitemviewtype(int position) {         if (candidateslist.get(position) instanceof candidate) {             return view_type_preview;         } else {             return view_type_vote;         }     }      @override     public recyclerview.viewholder oncreateviewholder(viewgroup parent, int viewtype) {         context = parent.getcontext();          if (viewtype == view_type_preview) {             view preview = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.item_candidate_recycler, parent, false);             return new candidateviewholder(preview); // view holder candidates items         } else if (viewtype == view_type_vote) {             view ballot = layoutinflater.from(parent.getcontext())                     .inflate(r.layout.item_ballot_view, parent, false); //false             return new ballotviewholder(ballot); // view holder contestedoffice items         }         return null;     }      @override     public void onbindviewholder(final recyclerview.viewholder holder, final int position) {         final int itemtype = getitemviewtype(position);          if (itemtype == view_type_preview) {             candidateviewholder.class.cast(holder).binddata((candidate)                     candidateslist.get(position));          } else if (itemtype == view_type_vote) {             ballotviewholder.class.cast(holder).binddata((contestedoffice)                     candidateslist.get(position));         }     }      @override     public int getitemcount() {         log.d(logcat, " size: " + candidateslist.size());         return candidateslist.size();     }      /**      * viewholder class      */     private class ballotviewholder extends recyclerview.viewholder implements view.onclicklistener {          private appcompattextview vote_candidate_name;         private appcompattextview vote_candidate_details;         private appcompattextview vote_candidate_party;         ballotviewholder(view view) {             super(view);              checkboxparent = (linearlayout) view.findviewbyid(r.id.checkbox_layout_parent);             vote_candidate_name = (appcompattextview) view.findviewbyid(r.id.vote_candidate_name)             vote_candidate_party = (appcompattextview) view.findviewbyid(r.id.vote_candidate_party);             vote_candidate_details = (appcompattextview) view.findviewbyid(r.id.vote_candidate_details);         }          void binddata(contestedoffice candidate)         {             int length = candidate.getlist().size();              log.d(logcat, "ballotlist size:" + length);             linearlayout.layoutparams params = new linearlayout.layoutparams(                     recyclerview.layoutparams.wrap_content, recyclerview.layoutparams.wrap_content);             //params.setmargins(10, 10, 10, 10);             params.gravity = gravity.end;              checkbox checkbox = null;             (int = 0; < length; i++)             {                 vote_candidate_name.settext(candidate.getlist().get(i).getcandidatename());                 vote_candidate_party.settext(candidate.getlist().get(i).getparty());                 vote_candidate_details.settext(candidate.getlist().get(i).getdetails());                  //create checkboxes each recycler view created                 checkbox = new checkbox(context);                 checkbox.settag(candidate.getlist().get(i).getcandidateid());                 checkbox.setid(candidate.getlist().get(i).getcandidateid());                 //checkbox.settext(r.string.checkbox_message);                 checkbox.settext(string.valueof(candidate.getlist().get(i).getcandidateid()));                 checkbox.setbackgroundcolor(color.red);                 log.d(logcat, "tags: " + checkbox.gettag() + " id: " + checkbox.getid());             }             if (checkbox != null) {                 checkbox.setonclicklistener(this);             }             checkboxparent.addview(checkbox, params);         }          @override         public void onclick(view v) {             // view checked?             boolean checked = ((checkbox) v).ischecked();              // check checkbox clicked             switch (v.getid()) {                 case 31:                     if (checked) {                         log.d(logcat, "here:" + v.gettag().tostring());                     } else                          break;                 case 30:                     if (checked) {                         log.d(logcat, "here:" + v.gettag().tostring());                     } else                          break;             }         }     }      /**      * viewholder class      */     private class candidateviewholder extends recyclerview.viewholder {          private appcompattextview candidate_name;         private appcompattextview candidate_details;         private appcompattextview candidate_party;         private appcompattextview candidate_position;         // private appcompatimageview candidate_image;          candidateviewholder(view view) {             super(view);              candidate_name = (appcompattextview) view.findviewbyid(r.id.candidate_name);             //  candidate_image = (appcompatimageview) view.findviewbyid(r.id.candidate_image);             candidate_position = (appcompattextview) view.findviewbyid(r.id.candidate_position);             candidate_party = (appcompattextview) view.findviewbyid(r.id.candidate_party);             candidate_details = (appcompattextview) view.findviewbyid(r.id.candidate_details);         }          void binddata(candidate candidate)//candidate         {             candidate_name.settext(candidate.getcandidatename());             candidate_position.settext(candidate.getposition());             candidate_details.settext(candidate.getdetails());             candidate_party.settext(candidate.getparty());             // candidate_image.setimagebitmap(candidate.getcandidatephoto());         }      } } 

my voteactivity class

public class voteactivity extends appcompatactivity implements view.onclicklistener {     private static final string logcat = voteactivity.class.getsimplename();      private appcompatactivity activity = voteactivity.this;      private recyclerview vote_recycler_view;     private linearlayout checkboxparent;      private checkbox vote_candidate_checkbox;      private appcompatbutton appcompatbuttonvote;      private recycleradapter recycleradapter;      recyclerview.layoutmanager layoutmanager;      private ballot ballot;      private list <contestedoffice> ballotlist = new arraylist<>();     private list<candidate> candidatelist = new arraylist<>();     private databasehelper databasehelper;       @override     public void oncreate(@nullable bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_vote);         getsupportactionbar().settitle("");          initviews();         initobjects();         initlisteners();     }      private void initlisteners()     {         appcompatbuttonvote.setonclicklistener(this);     }      private void initobjects()     {         recycleradapter = new recycleradapter(ballotlist);         databasehelper = new databasehelper(this);          layoutmanager = new linearlayoutmanager(activity);         vote_recycler_view.setlayoutmanager(layoutmanager);         vote_recycler_view.setitemanimator(new defaultitemanimator());         vote_recycler_view.sethasfixedsize(true);         vote_recycler_view.setadapter(recycleradapter);         getcandidates();     }      private void getcandidates()     {         new asynctask<void, void, void>()         {             @override             protected void doinbackground(void... params)             {                 ballotlist.clear();                 candidatelist.clear();                 candidatelist.addall(databasehelper.getallcandidates());                 createballot();                 return null;             }             @override             protected void onpostexecute(void avoid) {                 super.onpostexecute(avoid);                                     recycleradapter.notifydatasetchanged();             }         }.execute();     }      private void initviews()     {         checkboxparent = (linearlayout) findviewbyid(r.id.checkbox_layout_parent);         vote_recycler_view = (recyclerview) findviewbyid(r.id.vote_recycler_view);         //vote_candidate_checkbox = (checkbox) findviewbyid(r.id.vote_candidate_checkbox);         appcompatbuttonvote = (appcompatbutton) findviewbyid(r.id.appcompatbuttonvote);     }      public list<contestedoffice> createballot()     {         int candidatelistsize = candidatelist.size();         string position;          arraylist<string> positionarray = new arraylist<>();          contestedoffice office;          //looping through candidates list , add positions being contested         // array list.         (int = 0; i< candidatelistsize; i++)         {             position = candidatelist.get(i).getposition();              positionarray.add(position);         }          //create set remove duplicate positions         set<string> noduplicates = new hashset<>();         noduplicates.addall(positionarray);         positionarray.clear();         positionarray.addall(noduplicates);          log.d(logcat, "contested offices , candidates: " + positionarray.size() + " "+ candidatelistsize);          //create contested office according size of position array         //and make sure names added.         int noofcontestedoffice = positionarray.size();          for(int = 0; i<noofcontestedoffice; i++)         {             office = new contestedoffice(positionarray.get(i));             log.d(logcat, "new contested office created:" + office.getname());              candidate c = new candidate();             for(int j = 0; j < candidatelistsize; j++)             {                 //all seats/position being contested                 string candidateposition = candidatelist.get(j).getposition();                 string contestedofficename = office.getname();                  if(candidateposition.equals(contestedofficename)) {                     c = candidatelist.get(j);                     //add candidate contested office                     office.add(c);                 }                 log.d(logcat, "added candidate: "+ candidatelist.get(j) +" to: "+ office.getname());             }             //add offices ballot , ballot list             ballot = new ballot();             ballot.add(office);              //ideally ballot ballotlist             ballotlist.add(office);             log.d(logcat, "office added ballotlist: " + ballotlist.size());         }         return ballotlist;     } } 

my voteactivity xml

<?xml version="1.0" encoding="utf-8"?> <linearlayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     xmlns:tools="http://schemas.android.com/tools"     android:background="@color/colorbackground"     android:orientation="vertical"     tools:context=".activities.voteactivity">      <android.support.v7.widget.linearlayoutcompat         android:layout_width="match_parent"         android:layout_height="100dp"         android:background="@color/colorprimary"         android:gravity="center"         android:orientation="vertical">          <android.support.v7.widget.appcompattextview             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="@string/dashboard_vote_message"             android:textalignment="center"             android:textsize="20sp" />          <android.support.v7.widget.appcompattextview             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_margintop="5dp"             android:textalignment="center"             android:id="@+id/vote_message_placeholder"             android:text="@string/vote_message" />     </android.support.v7.widget.linearlayoutcompat>      <include layout="@layout/fragment_ballot_layout"/>      <include layout="@layout/footer_vote_button" />  </linearlayout> 

recyclerview xml

<?xml version="1.0" encoding="utf-8"?> <linearlayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_weight="1"     android:layout_width="match_parent"     android:layout_height="wrap_content">  <linearlayout     android:id="@+id/recycler_layout_parent"         android:layout_height="match_parent"         android:layout_width="match_parent"         android:orientation="vertical"         android:layout_margintop="5dp">          <android.support.v7.widget.recyclerview             android:layout_weight="1"             android:id="@+id/vote_recycler_view"             android:layout_width="match_parent"             android:layout_height="0dp"/>     </linearlayout>  </linearlayout> 

cardview xml

    <?xml version="1.0" encoding="utf-8"?>     <android.support.v7.widget.cardview         xmlns:android="http://schemas.android.com/apk/res/android"         xmlns:card_view="http://schemas.android.com/apk/res-auto"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_margintop="15dp"         xmlns:tools="http://schemas.android.com/tools"         card_view:cardcornerradius="4dp">          <linearlayout             android:layout_width="match_parent"             android:layout_height="?android:attr/listpreferreditemheight"             android:orientation="horizontal">              <android.support.v7.widget.appcompatimageview                 android:id="@+id/vote_candidate_image"                 android:layout_width="50dp"                 android:layout_height="50dp"                 android:layout_gravity="center_vertical"                 android:fontfamily="sans-serif-medium"                 android:gravity="center"                 android:src = "@drawable/btn_ballot"                 android:textcolor="@android:color/white"                 android:textsize="16sp"                 tools:text="8.9"                 android:contentdescription="@string/candidate_photo" />              <linearlayout                 android:layout_width="0dp"                 android:layout_height="wrap_content"                 android:layout_gravity="center_vertical"                 android:layout_marginleft="16dp"                 android:layout_marginstart="16dp"                 android:layout_weight="1"                 android:orientation="vertical">                  <android.support.v7.widget.appcompattextview                     android:id="@+id/vote_candidate_name"                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:ellipsize="end"                     android:fontfamily="sans-serif-medium"                     android:maxlines="1"                     android:textallcaps="true"                     android:textcolor="@color/textcolorcandidatename"                     android:textsize="12sp"                     tools:text="candidate name" />                  <android.support.v7.widget.appcompattextview                     android:id="@+id/vote_candidate_party"                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:textcolor="@color/textcolorpartydetails"                     android:textsize="12sp"                     android:ellipsize="end"                     tools:text="party name" />                  <android.support.v7.widget.appcompattextview                     android:id="@+id/vote_candidate_details"                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:ellipsize="end"                     android:maxlines="2"                     android:textcolor="@color/textcolordetails"                     android:textsize="16sp"                     tools:text="long placeholder candidate details. 2 lines max" />              </linearlayout>              <linearlayout                 android:id="@+id/checkbox_layout_parent"                 android:layout_width="wrap_content"                 android:layout_height="wrap_content"                 android:layout_gravity="center_vertical"                 android:layout_marginleft="16dp"                 android:layout_marginstart="16dp"                 android:orientation="vertical">                  <!--dynamic checkboxes here-->              </linearlayout>         </linearlayout>      </android.support.v7.widget.cardview> 

code output

i think creating object of candidate every time in loop make below chnages solve problem

 candidate c = new candidate();  ballot = new ballot(); for(int = 0; i<noofcontestedoffice; i++)         {             office = new contestedoffice(positionarray.get(i));             log.d(logcat, "new contested office created:" + office.getname());               for(int j = 0; j < candidatelistsize; j++)             {                 //all seats/position being contested                 string candidateposition = candidatelist.get(j).getposition();                 string contestedofficename = office.getname();                  if(candidateposition.equals(contestedofficename)) {                     c = candidatelist.get(j);                     //add candidate contested office                     office.add(c);                 }                 log.d(logcat, "added candidate: "+ candidatelist.get(j) +" to: "+ office.getname());             }             //add offices ballot , ballot list              ballot.add(office);              //ideally ballot ballotlist             ballotlist.add(office);             log.d(logcat, "office added ballotlist: " + ballotlist.size());         } 

just check once , done problem.

i have update xml below

 <android.support.v7.widget.recyclerview             android:layout_weight="1"             android:id="@+id/vote_recycler_view"             android:layout_width="match_parent"             android:layout_height="wrap_content"/>     </linearlayout> 

check out height of recyclerview.


Comments

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -