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