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.)

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
Post a Comment