Несколько погрузчиков с одинаковой активностью

У меня есть два настраиваемых загрузчика, унаследованных от AsyncTaskLoader которые я хотел бы использовать в своей деятельности. Каждый из них возвращает результат другого типа. Чтобы использовать свою активность для обратного вызова, я должен реализовать два интерфейса:

 implements LoaderCallbacks<GetSyncListDataResult>, LoaderCallbacks<ErrorResult> 

Однако, пытаясь реализовать необходимые методы в одном классе, я получаю ошибку с повторяющимся методом error и erasure (???):

 // Methods for the first loader public Loader<GetSyncListDataResult> onCreateLoader(int ID, Bundle bundle) ... public void onLoaderReset(Loader<GetSyncListDataResult> loader) ... public void onLoadFinished(Loader<GetSyncListDataResult> loader, GetSyncListDataResult result) ... // Methods for the second loader public Loader<ErrorResult> onCreateLoader(int ID, Bundle bundle) ... public void onLoaderReset(Loader<ErrorResult> loader) ... public void onLoadFinished(Loader<ErrorResult> loader, ErrorResult result) ... 

Очевидно, что методы сталкиваются, и мне нужен простой способ решить эту проблему. Каким будет правильный способ разрешения этого?

Solutions Collecting From Web of "Несколько погрузчиков с одинаковой активностью"

Правильный ответ соответствует комментарию @ dymmeh, т. Е. Не для Activity для реализации двух интерфейсов LoaderCallbacks но для активности, содержащей две реализации LoaderCallbacks . В качестве примера: инициализируйте поля LoaderCallbacks в вашей активности …

 private LoaderCallbacks<GetSyncListDataResult> dataResultLoaderListener = new LoaderCallbacks<GetSyncListDataResult>() { ...methods here... }; private LoaderCallbacks<ErrorResult> errorResultLoaderListener = new LoaderCallbacks<ErrorResult>() { ...methods here... }; 

… и объявить идентификаторы вашего загрузчика …

 private static final int DATA_RESULT_LOADER_ID = 1; private static final int ERROR_RESULT_LOADER_ID = 2; 

… и затем инициализировать ваши погрузчики …

 getLoaderManager().initLoader(DATA_RESULT_LOADER_ID, dataResultBundle, dataResultLoaderListener); getLoaderManager().initLoader(ERROR_RESULT_LOADER_ID, errorResultBundle, errorResultLoaderListener); 

… Готово!

Это не обязательно. Внедрение LoaderManager.LoaderCallbacks. Затем каждый раз, когда вы инициализируете загрузчик, дайте ему уникальный идентификатор. В обратных вызовах вы можете определить идентификатор загрузчика, который вызвал обратный вызов, и предпринять соответствующие действия.

то есть

 class MyLoader extends Activity implements LoaderManager.LoaderCallbacks<GetSyncDataResult> { ... private static final int LOADER1 = 1; private static final int LOADER2 = 2; ... getLoaderManager().initLoader(LOADER1, null, this); ... getLoaderManager().initLoader(LOADER2, null, this); ... public Loader<GetSyncDataResult> onCreateLoader(int loaderId, Bundle args) { switch (loaderId) { case LOADER1: ... case LOADER2: ... } ... 

и так далее.