java - How do I get the context from my fragment for my dagger dependency injection -


note: see update 2 have


currently in fragment's oncreateview(), have adapter recyclerview initialized this:

query query = couchlocaldb.getdatabase().getview(my_view_name).createquery(); livequery livequery = query.tolivequery();  if (myadapter == null) {     myadapter = new myadapter(getactivity().getapplication(), new arraylist<>(), getactivity(), livequery); } 

and constructor of said adapter:

public myadapter(application application,                  list<myviewholder> myviewholderlist,                  context context,                  livequery livequery) {     this.myviewholderlist = myviewholderlist;     this.context = context;     this.livequery = livequery     livequery.changelistener listener = new livequery.changelistener() {         @override         public void changed(livequery.changeevent event) {             ((activity)myadapter.this.context).runonuithread(new runnable() {                 @override                 public void run() {                     enumerator = event.getrows();                     notifydatasetchanged();                 }             });         }     };     ((mainapplication)application).getappcomponent().inject(this);     this.livequery.addchangelistener(listener);     this.livequery.start(); } 

but i'm trying learn how use dagger 2 dependency injection, , think shouldn't have "new" anywhere besides in dagger's appmodule?

so how write provide method in appmodule class when need context of fragment? or doing injection wrong , totally missed idea?

the context variable ever used in line:

((activity)myadapter.this.context).runonuithread(new runnable()... 

here's have far in appmodule class:

@provides myadapter providemyadapter() {     return new myadapter(mainapplication, new arraylist<>(), idk_context, getlivequery); }  private livequery getlivequery() {     return couchlocaldb.getdatabase().getview(my_view_name).createquery().tolivequery(); } 

i'm not sure how i'm supposed find way use getactivity() context fragment.

any hint?


update: okay this?

@module public class appmodule {     private myfragment myfragment = new myfragment(); // initialize here instead     private mainapplication mainapplication;      public appmodule(mainapplication mainapplication) {         this.mainapplication = mainapplication;     }      @provides     myadapter providemyadapter() {         return new myadapter(mainapplication, new arraylist<>(), myfragment.getactivity(), getlivequery());     }      @singleton     @provides     myfragment providemyfragment() {         return myfragment;     }      private livequery getlivequery() {         return couchlocaldb.getdatabase().getview(my_view_name).createquery().tolivequery();     } } 

update 2: ended doing this: added thing provide activity , call day. okay do?

@module public class appmodule {     private mainapplication mainapplication;      public appmodule(mainapplication mainapplication) {         this.mainapplication = mainapplication;     }      @provides     @singleton     myadapter providemyadapter(activity activity, livequery livequery) {         return new myadapter(mainapplication, new arraylist<>(), activity, livequery);     }      @provides     @singleton     myfragment providemyfragment() {         return new myfragment();     }      // added method , let provide activity provideadapter method.     @provides     @singleton     activity provideactivity(myfragment myfragment) {         return myfragment.getactivity();     }      @provides     @singleton     livequery providelivequery() {         return couchlocaldb.getdatabase().getview(my_view_name).createquery().tolivequery();     } } 

here's new constructor

public myadapter(application application,                  list<myviewholder> myviewholderlist,                  activity activity,                  livequery livequery) {     this.myviewholderlist = myviewholderlist;     this.livequery = livequery     livequery.changelistener listener = new livequery.changelistener() {         @override         public void changed(livequery.changeevent event) {             (activity).runonuithread(new runnable() {                 @override                 public void run() {                     enumerator = event.getrows();                     notifydatasetchanged();                 }             });         }     };     ((mainapplication)application).getappcomponent().inject(this);     this.livequery.addchangelistener(listener);     this.livequery.start(); } 

is okay thing do? not bad practice or anything?

you can use getactivity(), returns activity associated fragment.
activity context (since activity extends context).
here's example context in fragment :

//import android.app.fragment; import android.support.v4.app.fragment public class calendarfragment extends fragment {     static context mcontext      = null;                   //member variable     ...  @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {     mcontext = this.getactivity();                         //set mcontext     ((activity) mcontext).startmanagingcursor(notescursor);//cast activity     ... 

Comments

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -