我有一个使用两个加载程序的 Activity 。它们每个都返回不同类型的数据。要从单个Loader获取数据,只需将LoaderCallbacks<D>
实现到Activity中。我想我可以只实现LoaderCallbacks<Object>
并检查对象的类型,然后确定它是两个LoaderCallbacks中的哪一个,但是对我来说似乎很hack(主要是因为此处缺乏类型安全性)。
因此,我考虑将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
}
}
然后使用
lm.initLoader(0, null, geocoderLoaderCallbacks)
。出现两个问题:可以这样做,还是应该坚持在Activity中实现LoaderCallbacks?以及如何安全地将上下文传递给onCreateLoader?我应该只在geocoderLoaderCallbacks中构造一个构造函数,然后像
lm.initLoader(0, null, geocoderLoaderCallbacks(this))
那样传递上下文吗?LoaderManager with multiple loaders: how to get the right cursorloader这里有一个类似的问题,但是没有解释如何管理具有不同数据类型的两个加载器。
最佳答案
将代码从潜在的巨型类中移开总是可以的,与其他类一起处理可以处理所有事情的代码要干净得多。如果您觉得自己的Activity内部包含太多代码,则甚至可能希望使它们成为真正的外部类,而不是内部类。 LoaderCallbacks
是一个接口(interface),因此您可以并且应该在自己的类中实现它。
只要您不保持静态或缓存对其的引用,就可以在构造函数中传递Context
很好。