android - How to implement 2 different types of seperators( i.e headers) in a ListView Adapter class -


i calling adapter set of codes

   madapter = new mycustomadapter(getactivity());      madapter.addseparatoritem(new contentwrapper(q.get(0).geta_name(),null));     madapter.additem(new contentwrapper(q.get(0).getas_name(), q.get(0).getdesc_art())); 

consider code:

private class mycustomadapter extends baseadapter {  private static final int type_item = 0; private static final int type_separator = 1; private static final int type_max_count = type_separator + 1;  private arraylist<contentwrapper> mdata = new arraylist<contentwrapper>(); private layoutinflater minflater;  private treeset<integer> mseparatorsset = new treeset<integer>();  public mycustomadapter(context context) {     minflater = layoutinflater.from(context);  }  public void additem(contentwrapper value) {     mdata.add(value);     notifydatasetchanged(); }  public void addseparatoritem(contentwrapper value) {     mdata.add(value);     // save separator position     mseparatorsset.add(mdata.size() - 1);     notifydatasetchanged(); }  public contentwrapper getitem(int position) {     return mdata.get(position); } @override public int getitemviewtype(int position) {     return mseparatorsset.contains(position) ? type_separator : type_item; }  @override public int getviewtypecount() {     return type_max_count; }  public int getcount() {     return mdata.size(); }  public long getitemid(int position) {     log.v("getitemid position", ""+position);     return position;  }  public view getview(final int position, view convertview, viewgroup parent) {     viewholder holder = null;     int type = getitemviewtype(position);     if (convertview == null) {         holder = new viewholder();         switch (type) {         case type_item:             convertview = minflater.inflate(r.layout.white, null);             holder.textview = (textview)convertview.findviewbyid(r.id.text);             break;         case type_separator:             convertview = minflater.inflate(r.layout.black, null);             holder.textview = (textview)convertview.findviewbyid(r.id.textseparator);             count++;             break;         }         convertview.settag(holder);     } else {         holder = (viewholder)convertview.gettag();     } holder.textview.settext(mdata.get(position).getitem());      if (type == type_item) {         holder.textview.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view v) {                      alertdialog.builder builder = new alertdialog.builder(getactivity());                     builder.seticon(r.drawable.ic_launcher);                     final string title = mdata.get(position).getitem();                     builder.settitle(title);                     builder.setmessage(mdata.get(position).getitemdescription());                     builder.setcancelable(false);                     builder.setpositivebutton("ok", new dialoginterface.onclicklistener() {                         @override                         public void onclick(dialoginterface dialog, int which) {                             dialog.dismiss();                         }                     });                     alertdialog alertdialog = builder.create();                     alertdialog.setonshowlistener(new dialoginterface.onshowlistener() {                         @override                         public void onshow(dialoginterface dialog) {                             alertdialog alertdialog = (alertdialog) dialog;                             viewgroup viewgroup = (viewgroup) alertdialog.getwindow()                                     .getdecorview();                             textview textview = findtextviewwithtitle(viewgroup, title);                             if (textview != null) {                                 textview.setellipsize(null);                                 textview.setmaxheight((int) (100 * alertdialog.getcontext().getresources().getdisplaymetrics().density));                                  textview.setmovementmethod(new scrollingmovementmethod());                             }                         }                     });                     alertdialog.show();                 }                  private textview findtextviewwithtitle(viewgroup viewgroup, string title) {                     (int = 0, n = viewgroup.getchildcount(); < n; i++) {                         view child = viewgroup.getchildat(i);                         if (child instanceof textview) {                             textview textview = (textview) child;                             if (textview.gettext().equals(title)) {                                 return textview;                             }                         } else if (child instanceof viewgroup) {                             viewgroup vgroup = (viewgroup) child;                             return findtextviewwithtitle(vgroup, title);                         }                     }                     return null;                 }               });     } else {         holder.textview.setonclicklistener(null);     }  return convertview; } } public static class viewholder { public textview textview; }  public boolean ontouch(view v, motionevent event) { // todo auto-generated method stub return false; } 

this code display description of selected item (here type_item) in alertdialog.

as can see type_seperator have disabled onclick() & want add 1 more type_seperator_gray(let gray.xml) type seperator disabled onclick().

do need add 1 more method similar addseparatoritem(contentwrapper value) addseparatoritemgray(contentwrapper value). know have add 1 more case in switch of getview() inflating gray.xml

or else should add/modify?

edit: contentwrapper holds items text description. implemented contentwrapper assign each type_item description

public class contentwrapper {  private string mitem, mitemdescription;  public contentwrapper(string item, string itemdescription) {     mitem = item;     mitemdescription = itemdescription;  }  public string getitem() {     return mitem; }  public string getitemdescription() {     return mitemdescription; } } 

madapter of type mycustomadapter.

the first 3-4 lines of question says addseparatoritem not have description passed null in second argument & additem have both text , description.

i want add type_gray_separator , @ specified positions in list manually like

 madapter.addseparatoritemgray("hi after 1st view");  madapter.addseparatoritemgray("hi after 23rd view");  madapter.addseparatoritemgray("hi after 45 view"); 

the method getviewtype should return 3 (list item + separator + gray separator). hence set type_max_count 3.

private static final int type_gray_separator = 2; private static final int type_max_count = type_gray_separator + 1; 

data structure hold gray separator positions:

private treeset<integer> mgrayseparatorsset = new treeset<integer>(); 

method add gray separator.

public void addgrayseparatoritem(contentwrapper value) {     mdata.add(value);     // save separator position     mgrayseparatorsset.add(mdata.size() - 1);     notifydatasetchanged(); }            

the method getitemviewtype should return appropriate view based on position.

@override public int getitemviewtype(int position) {     int viewtype = type_item;     if(mseparatorset.contains(position))        viewtype = type_separator;     else if(mgrayseparatorset.contains(position)) {        viewtype = type_gray_separator;      }     return viewtype; } 

the method getview should handle type_gray_separator:

public view getview(final int position, view convertview, viewgroup parent) {     // existing code     switch(type) {         // existing cases         case type_gray_separator:             // inflate appropriate view            break;     }     // existing code } 

Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -