android - fragment callback using interface -


i have activity starts fragment. inside fragment have edittext. , when text user types there, want activity of interface. i'm using this guide

on mainactivity i'm implementing commentlistener interface , i've managed result inside oncommententered method. on donelistener, triggered when user presses button finishing activity, i'm getting null.

obviously oncommententered runs after donelistener.

any suggestions on how result on donelistener?

class mainactivity implements fragment.commentlistener{    static string comment;  protected void oncreate(bundle savedinstancestate) {      super.oncreate(savedinstancestate);     setcontentview(r.layout.addtransaction);     done=(textview)findviewbyid(r.id.done_button); }    // called when user presses button , mainactivity finishes.  public void donelistener(view v){     // here null      system.out.println(comment);     finish(); }   @override     public void oncommententered(string data) {              comment=data;              // here user typed              system.out.println(comment);     } } 

my fragment

public class thefragment extends fragment {  commentlistener clistener; static textview note; edittext comment;  public interface commentlistener{     void oncommententered(string data); }  public static thefragment newinstance(){     return new thefragment (); } public thefragment (){ }   @override public void onattach(context context) {     super.onattach(context);     clistener=(commentlistener) context; }  @override public void ondetach() {     super.ondetach();     clistener=null; }  @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate); }   @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {      view v;     v=inflater.inflate(r.layout.fragment, container, false);      comment=(edittext)v.findviewbyid(r.id.comment_picker);     comment.setonfocuschangelistener(new view.onfocuschangelistener() {         @override         public void onfocuschange(view v, boolean hasfocus) {              if (!hasfocus) {                   clistener.oncommententered(comment.gettext().tostring());             }         }     });     return v; } } 

create new interface, implement same in fragment. create method in interface , override same in fragments. while calling fragment activity create interface type fragment , call interface method.

eg:

 public class thefragment extends fragment implement fragmentnofyinterface {    ...    @override    protected void notify(string txt){      mtvtxt.settext(txt);    }    ..... }  interface format  public interface fragmentnofyinterface {      protected void notify(string txt); } 

activity format

class mainactivity implements fragment.commentlistener{          .....        private fragmentnofyinterface mfragmentnotifier;         .........         thefragment  mfragment = new  thefragment();          mfragmentnotifier = (fragmentnofyinterface ) mfragment;        fragmenttransaction transaction = mfragmentmngr.begintransaction().                             add(r.id.rl_fragment_navigation_container,                                     mfragment);        transaction .commit();        ......        //notify fragment when required        mfragmentnotifier.notify("hello world");       } 

Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -