【发布时间】:2013-03-26 17:42:57
【问题描述】:
我有两个从AsyncTaskLoader 继承的自定义构建加载器,我想在我的活动中使用它们。它们中的每一个都返回不同类型的结果。
要将我的活动用于回调,我必须实现两个接口:
implements LoaderCallbacks<GetSyncListDataResult>, LoaderCallbacks<ErrorResult>
但是,尝试在同一个类中实现所需的方法,我最终得到 重复方法错误和擦除(???)错误:
// 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) ...
显然,这些方法相互冲突,我需要一种简单的方法来解决这个问题。 解决这个问题的正确方法是什么?
【问题讨论】:
-
不要实现加载器。你只能实现一个加载器。相反,您应该将 LoaderCallbacks 声明为变量。例如。 LoaderCallbacks
syncListCallbacks = new LoaderCallbacks () { ...方法在这里 }; -
好的,所以最好在变量中有一个内部匿名类实例?
-
是的。然后启动你的加载器 getLoaderManager().initLoader(loaderId, bundle, syncListCallbacks);
-
好的,如果你愿意,你可以写这个作为答案,我会接受的。