Scopes Modules Components and Subcomponent in Dagger 2
Scopes
ApplicationScope.java
import javax.inject.Scope;
@Scope
public @interface ApplicationScope {
}
ActivityScope.java
import javax.inject.Scope;
@Scope
public @interface ActivityScope {
}
Modules
MyAppModule.java
@Module
public class MyAppModule {
private final Context mAppContext;
public MyAppModule(Application application) {
mAppContext = application;
}
@Provides
@ApplicationScope
Context providesMyAppContext() {
return mAppContext;
}
}
PersistentModule.java
@Module
public class PersistentModule {
@Provides
@ApplicationScope
SharedPreferences providesSharedPreferences(Context myAppContext) {
return PreferenceManager.getDefaultSharedPreferences(myAppContext);
}
}
ActivityModule.java
@Module
public class ActivityModule {
private Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
@Provides
Activity activity() {
return activity;
}
}
Components
MyAppComponent.java
@ApplicationScope
@Component(modules = {MyAppModule.class, PersistentModule.class})
public interface MyAppComponent {
ActivityComponent addChild(ActivityModule activityModule);
void inject(MyApp myApp);
}
ActivityComponent.java
@ActivityScope
@Subcomponent(modules = {ActivityModule.class})
public interface ActivityComponent {
void inject(MainActivity mainActivity);
}
Usages
MyApp.java
public class MyApp extends Application {
private MyAppComponent mMyAppComponent;
@Override
public void onCreate() {
super.onCreate();
mMyAppComponent = DaggerMyAppComponent.builder()
.myAppModule(new MyAppModule(this))
.persistentModule(new PersistentModule())
.webServiceModule(new WebServiceModule(Constants.BASE_URL))
.build();
mMyAppComponent.inject(this);
}
public MyAppComponent getMyAppComponent() {
return mMyAppComponent;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Inject SharedPreferences sharedPreferences;
private static final String TEXT_KEY = "text_key";
private EditText edText;
private TextView tvDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((MyApp) getApplication()).getMyAppComponent()
.addChild(new ActivityModule(this))
.inject(this);
edText = (EditText) findViewById(R.id.ed_text);
tvDisplay = (TextView) findViewById(R.id.tv_display);
}
public void save(View v) {
String text = edText.getText().toString();
SharedPreferences.Editor ed = sharedPreferences.edit();
ed.putString(TEXT_KEY, text);
boolean isSaved = ed.commit();
Snackbar.make(v, (isSaved) ? "Text Saved!" : "Failed to save the text!", Snackbar.LENGTH_SHORT).setAction("Action", null).show();
}
public void retrieve(View v) {
String savedText = sharedPreferences.getString(TEXT_KEY, "");
tvDisplay.setText(savedText);
}
activity_main.xml
AndroidManifest.xml
Search within Codexpedia
Custom Search
Search the entire web
Custom Search
Related Posts