В моем приложении я работаю с ContentProvider
и использую LoaderManager.LoaderCallbacks<Cursor>.
Фрагмент (представление)
public class ArticleCatalogFragment extends BaseFragment
implements ArticleCatalogPresenter.View,
LoaderManager.LoaderCallbacks<Cursor> {
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return onCreateArticleCatalogLoader(args);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
data.registerContentObserver(new LoaderContentObserver(new Handler(), loader));
updateUI(data);
}
private Loader onCreateArticleCatalogLoader(Bundle args) {
int categoryId = args.getInt(CATEGORY_ID);
Loader loader = new ArticleCatalogLoader(this.getActivity(), categoryId);
return loader;
}
}
С точки зрения MVP мне нужно:
Ведущий
public class ArticleCatalogPresenter extends BasePresenter
implements LoaderManager.LoaderCallbacks<Cursor> {
View view;
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return onCreateArticleCatalogLoader(args);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
data.registerContentObserver(new LoaderContentObserver(new Handler(), loader));
view.updateUI(data);
}
private Loader onCreateArticleCatalogLoader(Bundle args) {
int categoryId = args.getInt(CATEGORY_ID);
Loader loader = new ArticleCatalogLoader(context, categoryId); // need Context
return loader;
}
interface View {
updateUI(Cursor data)
}
}
Итак, мне нужен контекст в Presenter.
Есть некоторые нюансы:
Ведущий знает о Контексте - это плохо, Ведущий не должен знать об Андроиде.
Наличие контекста в Presenter может привести к утечке памяти.
Теперь я беспокоюсь о том, как избежать таких проблем, как утечка памяти, и как лучше передать контекст в Presenter, использовать контекст приложения или действие/фрагмент?
CursorLoader
, но я не знаю, хорошее ли это решение... - person Cassio Landim   schedule 21.09.2016