In my app I work with ContentProvider and use LoaderManager.LoaderCallbacks
Fragment (View)
Code like this
Loader loader = new ArticleCatalogLoader(context, categoryId);
leads to untestable code. You should avoid creating "business" objects in your code and let anyone else do it for you (any DI framework such as Dagger 2 would be a better option than handling it yourself)
Having said that, your problem is something that DI has solved a long time ago. Do you need a fresh new instance of any object? Use a Provider
A Provider is an object that "provides" instances of objects. So instead of having
Loader loader = new ArticleCatalogLoader(context, categoryId);
you will have
Loader loader = loaderProvider.get(categoryId);
So the only thing you need is something like this:
public class ArticleCatalogPresenter ... {
...
private final Provider loaderProvider;
public ArticleCatalogPresenter(Provider loaderProvider, ...) {
this.loaderProvider = loaderProvider;
...
}
private Loader onCreateArticleCatalogLoader(Bundle args) {
int categoryId = args.getInt(CATEGORY_ID);
Loader loader = loaderProvider.get(categoryId); // no context needed anymore!
return loader;
}
}