Click event from Adapter to Activity or Fragment in Android -
i have customized expandable list view showing in navigation drawer. have click listener in adapter send click event adapter activity or fragment.
is possible if how go doing it?
here snippet of adapter:
public class customadapter implements expandablelistadapter {
@override public view getgroupview(int position, boolean isexpanded, view convertview, viewgroup parent) { if (convertview == null) { convertview = inflater.inflate(r.layout.menu_item, parent, false); } textview text = (textview) convertview.findviewbyid(android.r.id.text1); text.settext(items.get(position).getname()); imageview imageview = (imageview) convertview.findviewbyid(r.id.imageindicator); if (items.get(position).ishaschild() && items.get(position).getsubmenuitems().size() > 0) imageview.setvisibility(view.visible); else imageview.setvisibility(view.invisible); if (isexpanded) imageview.setimageresource(r.drawable.down); else imageview.setimageresource(r.drawable.next); return convertview; } @override public view getchildview(final int childposition, int groupposition, boolean isexpanded, view convertview, final viewgroup parent) { view view = convertview; if (view == null) { view = inflater.inflate(r.layout.expandable_list, parent, false); } expandableheightlistview childlist = (expandableheightlistview) view.findviewbyid(r.id.childlist); childlist.setadapter(new customadapter(context, items.get(childposition).getsubmenuitems())); childlist.invalidate(); parent.invalidate(); final expandableheightlistview list = childlist; childlist.setongroupexpandlistener(new expandablelistview.ongroupexpandlistener() { int previousitem = -1; @override public void ongroupexpand(int groupposition) { arraylist<emenuitem> tempitems = items.get(childposition).getsubmenuitems(); if (tempitems.get(groupposition).getsubmenuitems().size() == 0) { toast.maketext(context, "start activity", toast.length_short).show(); } else { toast.maketext(context, "clicked on " + tempitems.get(groupposition).getname(), toast.length_short).show(); } if (groupposition != previousitem) list.collapsegroup(previousitem); previousitem = groupposition; list.invalidate(); parent.invalidate(); } }); return view; } }
with jared burrows - how create interface between fragment , adapter?
added few things customadapter , fragmentactivity
public class customadapter implements expandablelistadapter { public customadapter(mainactivity fragmentactivity) { try { this.madaptercallback = ((adaptercallback) fragmentactivity); } catch (classcastexception e) { throw new classcastexception("fragment must implement adaptercallback."); } } public static interface adaptercallback { void onmethodcallback(); } @override public view getgroupview(int position, boolean isexpanded, view convertview, viewgroup parent) { if (convertview == null) { convertview = inflater.inflate(r.layout.menu_item, parent, false); } textview text = (textview) convertview.findviewbyid(android.r.id.text1); text.settext(items.get(position).getname()); imageview imageview = (imageview) convertview.findviewbyid(r.id.imageindicator); if (items.get(position).ishaschild() && items.get(position).getsubmenuitems().size() > 0) imageview.setvisibility(view.visible); else imageview.setvisibility(view.invisible); if (isexpanded) imageview.setimageresource(r.drawable.down); else imageview.setimageresource(r.drawable.next); return convertview; } @override public view getchildview(final int childposition, int groupposition, boolean isexpanded, view convertview, final viewgroup parent) { view view = convertview; if (view == null) { view = inflater.inflate(r.layout.expandable_list, parent, false); } expandableheightlistview childlist = (expandableheightlistview) view.findviewbyid(r.id.childlist); childlist.setadapter(new customadapter(context, items.get(childposition).getsubmenuitems())); childlist.invalidate(); parent.invalidate(); final expandableheightlistview list = childlist; childlist.setongroupexpandlistener(new expandablelistview.ongroupexpandlistener() { int previousitem = -1; @override public void ongroupexpand(int groupposition) { arraylist<emenuitem> tempitems = items.get(childposition).getsubmenuitems(); if (tempitems.get(groupposition).getsubmenuitems().size() == 0) { log.e("value","position"+childposition); log.e("value","position"+groupposition); log.e("value","position"+tempitems.get(groupposition).getname()); madaptercallback.onmethodcallback(); } else { toast.maketext(context, "clicked on " + tempitems.get(groupposition).getname(), toast.length_short).show(); } if (groupposition != previousitem) list.collapsegroup(previousitem); previousitem = groupposition; list.invalidate(); parent.invalidate(); } }); return view; } }
and in main activity:
public class mainactivity extends fragmentactivity implements adaptercallback { @override protected void oncreate(bundle savedinstancestate) { this.mmyadapter = new customadapter(this); }
and added outside oncreate:
public void onmethodcallback() { log.e("call","value"); } }
but getting npe error still.. strange when don't use callback not getting npe when use callback getting npe: http://pastebin.com/wc2byifz
public class customadapter implements expandablelistadapter { activity youractivity public customadapter(activity youractivity) { this.youractivity= youractivity; } @override public view getgroupview(int position, boolean isexpanded, view convertview, viewgroup parent) { if (convertview == null) { convertview = inflater.inflate(r.layout.menu_item, parent, false); } textview text = (textview) convertview.findviewbyid(android.r.id.text1); text.settext(items.get(position).getname()); imageview imageview = (imageview) convertview.findviewbyid(r.id.imageindicator); if (items.get(position).ishaschild() && items.get(position).getsubmenuitems().size() > 0) imageview.setvisibility(view.visible); else imageview.setvisibility(view.invisible); if (isexpanded) imageview.setimageresource(r.drawable.down); else imageview.setimageresource(r.drawable.next); return convertview; } @override public view getchildview(final int childposition, int groupposition, boolean isexpanded, view convertview, final viewgroup parent) { view view = convertview; if (view == null) { view = inflater.inflate(r.layout.expandable_list, parent, false); } expandableheightlistview childlist = (expandableheightlistview) view.findviewbyid(r.id.childlist); childlist.setadapter(new customadapter(context, items.get(childposition).getsubmenuitems())); childlist.invalidate(); parent.invalidate(); final expandableheightlistview list = childlist; childlist.setongroupexpandlistener(new expandablelistview.ongroupexpandlistener() { int previousitem = -1; @override public void ongroupexpand(int groupposition) { arraylist<emenuitem> tempitems = items.get(childposition).getsubmenuitems(); if (tempitems.get(groupposition).getsubmenuitems().size() == 0) { youractivity.onyourclick(groupposition); } else { toast.maketext(context, "clicked on " + tempitems.get(groupposition).getname(), toast.length_short).show(); } if (groupposition != previousitem) list.collapsegroup(previousitem); previousitem = groupposition; list.invalidate(); parent.invalidate(); } }); return view; } } //your fragment public class youractivity extends fragmentactivity{ public void onyourclick(int groupposition){ }
Comments
Post a Comment