2013-03-14 4 views
2

Я хочу использовать разные AsyncTaskLoaders (разные по типу возврата) в моей работе, что лучший способ реализовать методы обратного вызова?Использовать разные (AsyncTask) Loaders в одном действии

Это не будет работать:

общественный класс MyActivity расширяет активность реализует LoaderManager.LoaderCallbacks < MyPojo>, LoaderManager.LoaderCallbacks < MyOtherPojo>

Затмение говорит

The interface LoaderCallbacks cannot be implemented more than once with different arguments 

Так что мне делать? Моя идея заключается в том, чтобы сделать деятельность

Реализует LoaderManager.LoaderCallbacks < Object>

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

ответ

8

Как создать внутренний класс для каждого обратного вызова?

public class MyClass extends Activity { 

    private class Callback1 implements LoaderManager.LoaderCallbacks<MyPojo> { 
    ... 
    } 
    private class Callback2 implements LoaderManager.LoaderCallbacks<MyOtherPojo> { 
    ... 
    } 
} 
+0

Блестящий, спасибо кучу! – FWeigl

+0

Но как вы можете вызвать загрузчик инициализации в этом случае? –

+0

@AmeyJahagirdar С новым экземпляром внутреннего класса:. 'getLoaderManager() initLoader (LOADER_MYPOJO_ID, нуль, новый Callback1());' Или, если несколько Погрузчики должны использовать один и тот же обратный вызов (грузчики должны быть registrered с явными идентификаторами, поэтому onCreateLoader и onLoadFinished могут отличить, откуда был вызван обратный вызов), вы можете иметь активность у компонента обратного вызова и использовать его для initLoader(): 'private final LoaderCallbacks reusableCallback1 = new LoaderCallbacks {...}; ' –

 Смежные вопросы

  • Нет связанных вопросов^_^