android - Issues with personal listView Adapter -


i'm having troubles using own adapter class creating listview delimiter. i'm beginner in android development can't fix alone.

i want create listview same layout seen on web site, , want items alphabetically ordered.

so create 2 adapter, 1 adding delimiters, , other 1 handling specific layout of each item.

the class listemusiccontainer arraylist sorted alphabetically name.

each 1 works fine separately, when try out both, runtime error.

the error doesn't appear when application starts, when try scroll (so guess i'm good).

i don't why error when scrolling. how can solved?

here adapter use create listview delimiter

abstract public class musicadapter extends baseadapter{  abstract protected view getheaderview(string caption, int index,         view convertview, viewgroup parent); private list<section> sections = new arraylist<section>();  private static int type_section_header = 0;  public musicadapter() {     super(); }  public void addsection(string caption, itemadapter adapter){     sections.add(new section(caption, adapter)); }  public object getitem(int position){     (section section : this.sections){         if (position == 0){             return section;         }          int size = section.adapter.getcount() + 1;         if (position < size){             return section.adapter.getitem(position - 1);         }         position -= size;     }     return null; }  public int getcount(){     int total = 0;      (section section : this.sections){         total += section.adapter.getcount() + 1;     }     return total; }  public int getitemviewtype(int position){     int typeoffset = type_section_header + 1;      (section section : this.sections) {         if (position == 0) {             return (type_section_header);         }          int size = section.adapter.getcount() + 1;          if (position < size) {             return (typeoffset + section.adapter                     .getitemviewtype(position - 1));         }          position -= size;         typeoffset += section.adapter.getviewtypecount();     }      return -1; }  public boolean areallitemsselectable(){     return false; }  public boolean isenabled(int position) {     return (getitemviewtype(position) != type_section_header); }  @override public view getview(int position, view convertview, viewgroup parent){     int sectionindex = 0;      (section section : this.sections){         if (position == 0){             return (getheaderview(section.caption, sectionindex, convertview, parent));         }         int size = section.adapter.getcount() + 1;          if (position < size){             return (section.adapter.getview(position - 1, convertview,                     parent));         }         position -= size;         sectionindex++;     }     return null; }  @override public long getitemid(int position){     return position;         }  class section {     string caption;     itemadapter adapter;      section(string caption, itemadapter adapter) {         this.caption = caption;         this.adapter = adapter;     } } } 

and here 1 use each item :

public class itemadapter extends baseadapter{  private listemusiccontainer<music> mlist; private layoutinflater minflater;  public itemadapter(context context, listemusiccontainer<music> musics){     minflater = layoutinflater.from(context);     mlist = musics; }  @override public int getcount() {     return mlist.size(); }  @override public object getitem(int position) {     return position; }  @override public long getitemid(int position) {     return position; }  @override public view getview(int position, view convertview, viewgroup parent) {     viewholder holder;      if (convertview == null){         convertview = minflater.inflate(r.layout.list_item, null);          holder = new viewholder();         holder.nom = (textview) convertview.findviewbyid(r.id.nomalbum);         holder.genre = (textview) convertview.findviewbyid(r.id.genrealbum);          convertview.settag(holder);     }     else{         holder = (viewholder) convertview.gettag();     }     holder.nom.settext(mlist.getitem(position).getnom());     holder.genre.settext(mlist.getitem(position).getgenre());      return convertview; }  static class viewholder{     textview nom;     textview genre; }  } 

here how initialize layout :

public class testview extends listactivity { /** called when activity first created. */  private listview mlistview; private static string[] items; private xmldataparser mparser; private listemusiccontainer<music> mlist;   private musicadapter madapter = new musicadapter() {     protected view getheaderview(string caption, int index,             view convertview, viewgroup parent) {         textview result = (textview) convertview;          if (convertview == null) {             result = (textview) getlayoutinflater().inflate(                     r.layout.header, null);         }          result.settext(caption);          return (result);     } };  @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      mparser = new xmldataparser();     mlist = mparser.parsexml(this);      listemusiccontainer<music> groupe = new listemusiccontainer<music>();     string currletter = null;      (int = 0; < mlist.size(); i++){         if (!mlist.getitem(i).getlabel().equalsignorecase(currletter) && currletter != null){             madapter.addsection(mlist.getitem(i).getlabel().touppercase(), new itemadapter(this, groupe));             groupe = new listemusiccontainer<music>();             currletter = mlist.getitem(i).getlabel();         }         if (currletter == null){             currletter = mlist.getitem(i).getlabel();         }          groupe.adddata(mlist.getitem(i));     }      setlistadapter(madapter);  } } 

edit : in logcat, here got in logcat when running application :

i/activitymanager(   42): displayed activity com.view/.testview: 1480 ms (total 1480 ms) d/dalvikvm(  975): gc_external_alloc freed 1214 objects / 78504 bytes in 96ms d/androidruntime(  975): shutting down vm w/dalvikvm(  975): threadid=1: thread exiting uncaught exception (group=0x4 001d800) e/androidruntime(  975): fatal exception: main e/androidruntime(  975): java.lang.nullpointerexception e/androidruntime(  975):        @ com.view.itemadapter.getview(itemadapter.java :51) e/androidruntime(  975):        @ com.view.musicadapter.getview(music adapter.java:91) e/androidruntime(  975):        @ android.widget.abslistview.obtainview(abslist view.java:1294) e/androidruntime(  975):        @ android.widget.listview.makeandaddview(listvi ew.java:1727) e/androidruntime(  975):        @ android.widget.listview.filldown(listview.jav a:652) e/androidruntime(  975):        @ android.widget.listview.fillgap(listview.java :623) e/androidruntime(  975):        @ android.widget.abslistview.trackmotionscroll( abslistview.java:2944) e/androidruntime(  975):        @ android.widget.abslistview.ontouchevent(absli stview.java:2065) e/androidruntime(  975):        @ android.widget.listview.ontouchevent(listview .java:3315) e/androidruntime(  975):        @ android.view.view.dispatchtouchevent(view.jav a:3766) e/androidruntime(  975):        @ android.view.viewgroup.dispatchtouchevent(vie wgroup.java:897) e/androidruntime(  975):        @ android.view.viewgroup.dispatchtouchevent(vie wgroup.java:936) e/androidruntime(  975):        @ android.view.viewgroup.dispatchtouchevent(vie wgroup.java:936) e/androidruntime(  975):        @ android.view.viewgroup.dispatchtouchevent(vie wgroup.java:936) e/androidruntime(  975):        @ com.android.internal.policy.impl.phonewindow$ decorview.superdispatchtouchevent(phonewindow.java:1671) e/androidruntime(  975):        @ com.android.internal.policy.impl.phonewindow. superdispatchtouchevent(phonewindow.java:1107) e/androidruntime(  975):        @ android.app.activity.dispatchtouchevent(activ ity.java:2086) e/androidruntime(  975):        @ com.android.internal.policy.impl.phonewindow$ decorview.dispatchtouchevent(phonewindow.java:1655) e/androidruntime(  975):        @ android.view.viewroot.handlemessage(viewroot. java:1785) e/androidruntime(  975):        @ android.os.handler.dispatchmessage(handler.ja va:99) e/androidruntime(  975):        @ android.os.looper.loop(looper.java:123) e/androidruntime(  975):        @ android.app.activitythread.main(activitythrea d.java:4627) e/androidruntime(  975):        @ java.lang.reflect.method.invokenative(native method) e/androidruntime(  975):        @ java.lang.reflect.method.invoke(method.java:5 21) e/androidruntime(  975):        @ com.android.internal.os.zygoteinit$methodanda rgscaller.run(zygoteinit.java:868) e/androidruntime(  975):        @ com.android.internal.os.zygoteinit.main(zygot einit.java:626) e/androidruntime(  975):        @ dalvik.system.nativestart.main(native method)  w/activitymanager(   42):   force finishing activity com.view/.testview 


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

android - layout with fragment and framelayout replaced by another fragment and framelayout -