LoaderCallbacks作为一个静态的内部类(处理多个不同数据types的Loaders返回)

我有一个使用两个装载机的活动。 他们每个人返回不同types的数据。 要从一个Loader获取数据,只需将LoaderCallbacks<D>到一个Activity中。 我想我可以只实现LoaderCallbacks<Object>并检查LoaderCallbacks<Object>的types,然后决定它的两个LoaderCallbacks中的哪一个,但对我来说这似乎是一个破解(主要是因为这里缺lesstypes安全性)。

所以我想让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)

出现两个问题:可以,或者我应该坚持将LoaderCallbacks实现为Activity? 我如何安全地将上下文传递给onCreateLoader? 我应该只是在lm.initLoader(0, null, geocoderLoaderCallbacks(this))构造一个构造函数,并像这个lm.initLoader(0, null, geocoderLoaderCallbacks(this))那样传递上下文吗?

在这里有一个类似的问题LoaderManager与多个加载器:如何获得正确的光标加载器,但它不解释如何pipe理两个不同数据types的加载器。

Solutions Collecting From Web of "LoaderCallbacks作为一个静态的内部类(处理多个不同数据types的Loaders返回)"

将代码从一个潜在的巨人类中移出总是可以的,而且用不同的类来处理代码,然后用一个可以处理所有事情的代码就更加简单了。 如果你觉得你的Activity有太多的代码,你甚至可能想让它们成为真正的外部类而不是内部类。 LoaderCallbacks是一个接口,所以你可以和大部分应该在它自己的类中实现它。

在构造函数中传递Context没有问题,只要不保存静态或caching的引用即可。