我有一个使用两个装载机的活动.它们中的每一个都返回不同类型的数据.要从单个Loader获取数据,只需实现LoaderCallbacks<D>一个Activity即可.我想我可以实现LoaderCallbacks<Object>并检查对象的类型,然后决定它是哪两个LoaderCallbacks,但这对我来说似乎是一个黑客攻击(主要是因为这里没有类型安全).
所以我想到让LoaderCallbacks对象成为一个静态内部类,如下所示:
private static class geocoderLoaderCallbacks implements LoaderCallbacks<List<Address>>{
@Override
public Loader<List<Address>> onCreateLoader(int arg0, Bundle arg1) {
GeocoderTask loader = new GeocoderTask(context, "");
return loader;
}
@Override
public void onLoadFinished(Loader<List<Address>> loader, List<Address> data) {
// TODO Auto-generated method stub
}
@Override
public void onLoaderReset(Loader<List<Address>> loader) {
// TODO Auto-generated method stub
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用lm.initLoader(0, null, geocoderLoaderCallbacks).
出现两个问题:是否可以,或者我是否应该坚持将LoaderCallbacks实施到Activity中?我如何安全地将上下文传递给onCreateLoader?我应该在geocoderLoaderCallbacks中创建一个构造函数并像这样传递上下文lm.initLoader(0, null, geocoderLoaderCallbacks(this))吗?
这里有一个类似的问题LoaderManager有多个加载器:如何获得正确的游标加载器,但它没有解释如何管理具有不同数据类型的两个加载器.
将代码从一个潜在的巨型类中移开总是可以的,并且使用不同的类然后使用可以处理所有内容的类更干净.如果你觉得你的Activity里面有太多代码,你甚至可能想让它们成为真正的外部类而不是内部类.LoaderCallbacks是一个接口,所以你可以并且大多数应该在它自己的类中实现它.
Context只要不保留静态或其他缓存的引用,传入构造函数就可以了.
| 归档时间: |
|
| 查看次数: |
4489 次 |
| 最近记录: |