android - Implementing FloatingGroupExpandableListView in a listview consisting 2 types of headers -


i tried implement floatinggroupexpandablelistview unable modify according custom listview.

the below code implements 2 types of headers in list.

well, implementing 2 types of header complex task me & within implementing floatinggroupexpandablelistview not easy task , not able customize code according custom listview.

please see mycustomadapter class, & please tell me how can modify achieve task ?

public class contentsfragment extends listfragment  implements ontouchlistener {  private mycustomadapter madapter; activity temp = getactivity();  string []s = new string[500]; arraylist<gs> q = new arraylist<gs>(); listview lv; int count=0;  @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate);  dbadapter db = dbadapter.getdbadapter(getactivity());  if (!db.checkdatabase())        db.createdatabase(getactivity());  db.opendatabase();  q = db.getdata();  madapter = new mycustomadapter(getactivity());  madapter.addseparatoritem(new contentwrapper(q.get(0).geta_name(),null,null));//1st type of seperator madapter.additem(new contentwrapper(q.get(0).getas_name(), q.get(0).getdesc_art(),null));   (int = 1; <= 14; i++) { if (!(q.get(i).geta_name().trim().equals(q.get(i-1).geta_name().trim()))) {    madapter.addseparatoritem(new contentwrapper(q.get(i).geta_name(), null,null));//2nd type of separator } if(!(q.get(i).getextra()==null))   madapter.addgrayseparatoritem(new contentwrapper(q.get(i).getextra(),null,null));  madapter.additem(new contentwrapper(q.get(i).getas_name(), q.get(i).getdesc_art(),null)); }  (int = 15; < 236; i++) {   if (!(q.get(i).geta_name().trim().equals(q.get(i-1).geta_name().trim()))) {        madapter.addseparatoritem(new contentwrapper(q.get(i).geta_name(), null,null));    }   if(!(q.get(i).getextra()==null))       madapter.addgrayseparatoritem(new contentwrapper(q.get(i).getextra(),null,null));     madapter.additem(new contentwrapper(q.get(i).getas_name(), q.get(i).getdesc_art(),null));      } //adapter class private class mycustomadapter extends baseadapter {  private static final int type_item = 0; private static final int type_separator = 1; private static final int type_gray_separator = 2; private static final int type_max_count = type_gray_separator + 1;  private treeset<integer> mgrayseparatorsset = new treeset<integer>();  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 void addgrayseparatoritem(contentwrapper value) {     mdata.add(value);     // save separator position     mgrayseparatorsset.add(mdata.size() - 1);     notifydatasetchanged(); }      public contentwrapper getitem(int position) {     return mdata.get(position); } @override public int getitemviewtype(int position) {     int viewtype = type_item;     if(mseparatorsset.contains(position))        viewtype = type_separator;     else if(mgrayseparatorsset.contains(position)) {        viewtype = type_gray_separator;      }      return viewtype;     // 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);             break;         case 2:             convertview = minflater.inflate(r.layout.gray, null);             holder.textview = (textview)convertview.findviewbyid(r.id.textviewgray);             break;          }         convertview.settag(holder);     } else {         holder = (viewholder)convertview.gettag();     } holder.textview.settext(mdata.get(position).getitem());      getlistview().setfastscrollenabled(true);     if (type == type_item) {         holder.textview.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view v) { // printing details in alert dialog                             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();                 }                      //customised alert dialog                  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 if(type == 1) {         holder.textview.setonclicklistener(null);     }     else     {         holder.textview.setonclicklistener(null);     }  return convertview; } } public static class viewholder { public textview textview; public textview header;  int previoustop = 0; }  public boolean ontouch(view v, motionevent event) { return false; } } } 

enter image description here

as can see there 2 types of headers(1 of black color & 1 of gray color) wit child of white color.

black background, gray background & white background sh'd child view of green background(it floatinggroupexpandableheader)(relative layout id sample_activity_list_group_item_background)! views 1-30 of part 1 , green background text part 1 (floatinggroupexpandableheader) childs 1 30 irrespective of fact weather black background, gray background, or white background ! @ view 31 want add floatinggroupexpandableheader text part 2 (child views 31-60), hope trying achieve clear !

for floatinggroupexpandablelistview xml files ready,i don't want add header or footer,

sample_activity_list_group_item.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="wrap_content" android:orientation="horizontal" >    <relativelayout     android:id="@+id/sample_activity_list_group_item_background"     android:layout_width="0dp"     android:layout_height="40dp"     android:layout_gravity="center_vertical"     android:layout_weight="1"     android:background="#ffa2c955"     android:orientation="horizontal" >      <textview         android:id="@+id/sample_activity_list_group_item_text"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignparentleft="true"         android:layout_centervertical="true"         android:layout_marginleft="20dp"         android:textcolor="#ffffffff"         android:textsize="20sp" />      <imageview         android:id="@+id/sample_activity_list_group_expanded_image"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_alignparentright="true"         android:layout_centervertical="true"         android:layout_marginright="20dp" /> </relativelayout>  </linearlayout> 

sample_activity.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" android:background="#ffededed" android:orientation="vertical" >  <com.diegocarloslima.fgelv.lib.floatinggroupexpandablelistview     android:id="@+id/sample_activity_list"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:cachecolorhint="@android:color/transparent"     android:childdivider="#ff000000"     android:divider="#ff000000"     android:dividerheight="1dp"     android:paddingleft="10dp"     android:paddingtop="10dp" />  </linearlayout> 

now should add/modify in class?

please me,

thanks in advance.

try floatinggroupexpandablelistview

i find best implementation. use reflection job. need use android groupexpandablelistview , baseexpandablelistadapter.

list<contentwrapper> items = new arraylist<contentwrapper>(); contentwrapper group; (int = 1; <= 14; i++) {   if (!(q.get(i).geta_name().trim().equals(q.get(i-1).geta_name().trim()))) {     group = new contentwrapper(q.get(i).geta_name(), null,null));   }   contentwrapper item = new contentwrapper(q.get(i).getas_name(), q.get(i).getdesc_art(),null);   if(!(q.get(i).getextra()==null))      item.setshowgrayseparator();//the gray separator should merged item view;   items.add(item); } madapter.addgroup(group,items); 

public class customexpandablelistadapter extends baseexpandablelistadapter {      private list<contentwrapper> mgroups = new arraylist<contentwrapper>();     private list<list<contentwrapper>> mdata = new arraylist<list<contentwrapper>>();      public void addgroup(contentwrapper group,list<contentwrapper> items) {         mgroups.add(group);         mdata.add(items);     }      @override     public int getgroupcount() {         // sticky header count         return mgroups.size();     }      @override     public int getchildrencount(int groupposition) {         // child count each group @ 'groupposition'         mdata.get(groupposition).size();     }              @override     public view getgroupview(int groupposition, boolean isexpanded, view convertview, viewgroup parent) {         //sticky header view @ 'groupposition'         contentwrapper header = mgroups.get(groupposition);         //show group view      }      @override     public view getchildview(int groupposition, int childposition, boolean islastchild, view convertview, viewgroup parent) {        //child view @ 'childposition' 'groupposition'        contentwrapper item = mdata.get(groupposition).get(childposition);        // show item view     }  } 

Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -