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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -