android custom Listview items are jumbled -


hi :) create custom listview, but if items more count, listview becomes strange. items jumbled.



added items this:

mitems.add(new venueslistheader("barra")); mitems.add(new venueslistitem("olympic gold course")); mitems.add(new venueslistitem("pontal")); mitems.add(new venueslistitem("barra olympic park")); mitems.add(new venueslistitem("riocentro"));  mitems.add(new venueslistheader("copacabana")); mitems.add(new venueslistitem("beach volleyball arena")); mitems.add(new venueslistitem("flamengo park")); mitems.add(new venueslistitem("fort copacabana")); mitems.add(new venueslistitem("lagoa stadium")); mitems.add(new venueslistitem("marina da gloria"));  mitems.add(new venueslistheader("deodora")); mitems.add(new venueslistitem("drodora aquatics centre")); mitems.add(new venueslistitem("drodora stadium")); mitems.add(new venueslistitem("olympic equestrian centre")); mitems.add(new venueslistitem("olympic hockey centre")); mitems.add(new venueslistitem("olympic shooting centre")); mitems.add(new venueslistitem("youth arena")); mitems.add(new venueslistitem("x-park"));  mitems.add(new venueslistheader("maracana")); mitems.add(new venueslistitem("olympic stadium")); mitems.add(new venueslistitem("sambodromo")); mitems.add(new venueslistitem("maracana")); 

but starts third header items jumbled. (i tried several attempts, number of headers not critical.)

enter image description here



code :

view mheader; listview mlistview; arraylist<item> mitems; venueslistadapter madapter;  public view oncreateview(layoutinflater inflater, @nullable viewgroup container, @nullable bundle savedinstancestate) {      //listview set list     mlistview = (listview)rootview.findviewbyid(r.id.venues_list);     mheader = inflater.inflate(r.layout.rio2016_venues_map, mlistview, false);     mitems = new arraylist<>();      setlist("all");      madapter = new venueslistadapter(getactivity(), mitems);      mlistview.addheaderview(mheader);     mlistview.setadapter(madapter); }   void setlist(string type){     switch (type){         case "barra":             mitems.clear();         case "all_barra":             mitems.add(new venueslistheader("barra"));             mitems.add(new venueslistitem("olympic gold course"));             mitems.add(new venueslistitem("pontal"));             mitems.add(new venueslistitem("barra olympic park"));             mitems.add(new venueslistitem("riocentro"));             break;          case "copacabana":             mitems.clear();         case "all_copacabana":             mitems.add(new venueslistheader("copacabana"));             mitems.add(new venueslistitem("beach volleyball arena"));             mitems.add(new venueslistitem("flamengo park"));             mitems.add(new venueslistitem("fort copacabana"));             mitems.add(new venueslistitem("lagoa stadium"));             mitems.add(new venueslistitem("marina da gloria"));             break;          case "deodoro":             mitems.clear();         case "all_deodoro":             mitems.add(new venueslistheader("deodora"));             mitems.add(new venueslistitem("drodora aquatics centre"));             mitems.add(new venueslistitem("drodora stadium"));             mitems.add(new venueslistitem("olympic equestrian centre"));             mitems.add(new venueslistitem("olympic hockey centre"));             mitems.add(new venueslistitem("olympic shooting centre"));             mitems.add(new venueslistitem("youth arena"));             mitems.add(new venueslistitem("x-park"));             break;          case "maracana":             mitems.clear();         case "all_maracana":             mitems.add(new venueslistheader("maracana"));             mitems.add(new venueslistitem("olympic stadium"));             mitems.add(new venueslistitem("sambodromo"));             mitems.add(new venueslistitem("maracana"));             break;          case "all":             mitems.clear();             setlist("all_barra");             setlist("all_copacabana");             setlist("all_copacabana");             setlist("all_maracana");             break;     } } 

if need, custom adapter

public class venueslistadapter extends arrayadapter<item>{      private static final int type_item = 0;     private static final int type_header = 1;      private layoutinflater minflater;      public venueslistadapter(context context, list<item> items) {         super(context, 0, items);         minflater = layoutinflater.from(context);     }      public enum rowtype {         list_item, header_item     }      @override     public int getitemviewtype(int position) {         return getitem(position).getviewtype();     }      @override     public int getviewtypecount() {         return rowtype.values().length;     }      @override     public view getview(int position, view convertview, viewgroup parent) {         viewholder holder = null;         int rowtype = getitemviewtype(position);          if(convertview == null){             holder = new viewholder();              switch (rowtype){                 case type_item :                     convertview = minflater.inflate(r.layout.rio2016_venues_item, null);                     holder.view = getitem(position).getview(minflater, convertview);                     break;                 case type_header :                     convertview = minflater.inflate(r.layout.rio2016_venues_header, null);                     holder.view = getitem(position).getview(minflater, convertview);                     break;             }             convertview.settag(holder);         } else {             holder = (viewholder) convertview.gettag();         }          return convertview;     }      public static class viewholder {         public  view view;     } } 

(the same problem occurs trough without use of recursive function.)



xml :

<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical" android:layout_width="match_parent"     android:layout_height="match_parent">      <listview         android:id="@+id/venues_list"         android:layout_width="match_parent"         android:layout_height="wrap_content" />  </linearlayout> 

item adapter

<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical" android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingleft="10dp"     android:background="@color/white"     android:padding="15dp">       <textview         android:id="@+id/venues_list_item"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="text"         android:layout_centervertical="true"/>  </relativelayout> 

header adapter:

<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical" android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingleft="10dp"     android:paddingtop="5dp"     android:paddingbottom="5dp"     android:background="@color/nav_header_background">      <textview         android:id="@+id/venues_list_header"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="large text"         android:layout_centervertical="true"/>  </relativelayout> 



phenomenon why occurring? can resolve this?

change code , try following:

 public class venueslistadapter extends arrayadapter<item>{              private static final int type_item = 0;             private static final int type_header = 1;              private layoutinflater minflater;              public venueslistadapter(context context, list<item> items) {                 super(context, 0, items);                 minflater = layoutinflater.from(context);             }              public enum rowtype {                 list_item, header_item             }         @override             public int getviewtypecount() {                 // todo auto-generated method stub                 return 2;             }          @override             public int getitemviewtype(int position) {                 // todo auto-generated method stub                   if(position == type_item)                  {return 1;}                  else{return 0;}             }              @override             public int getviewtypecount() {                 return rowtype.values().length;             }              @override             public view getview(int position, view convertview, viewgroup parent) {                 viewholder holder = null;                   if(convertview == null){                     holder = new viewholder();                     convertview.settag(holder);                 } else {                     holder = (viewholder) convertview.gettag();                 }   int type=getitemviewtype(position);             if(type==1){                   convertview = minflater.inflate(r.layout.rio2016_venues_item, null);        holder.view =  getitem(position).getview(minflater, convertview);              }else{       convertview = minflater.inflate(r.layout.rio2016_venues_header, null);        holder.view = getitem(position).getview(minflater, convertview);     }                 return convertview;             }              public static class viewholder {                 public  view view;             }         } 

this common problem of long listview , can resolved using:

@override     public int getviewtypecount() {         // todo auto-generated method stub         return integer(number of different cases in list);     }        @override     public int getitemviewtype(int position) {         // todo auto-generated method stub      } 

Comments

Popular posts from this blog

python - Mongodb How to add addtional information when aggregating? -

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

java - Incorrect order of records in M-M relationship in hibernate -