- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用两个加载器的 Activity 。他们每个人都返回不同类型的数据。要从单个加载器获取数据,只需实现 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)
.
出现两个问题:是否可以这样做,或者我应该坚持将 LoaderCallbacks 实现到 Activity 中?我如何安全地将上下文传递到 onCreateLoader?我是否应该在 geocoderLoaderCallbacks 中创建一个构造函数并像这样传递上下文 lm.initLoader(0, null, geocoderLoaderCallbacks(this))
?
这里也有类似的问题LoaderManager with multiple loaders: how to get the right cursorloader但它没有解释如何管理两个具有不同数据类型的加载器。
最佳答案
将代码从一个潜在的巨型类中移开总是没问题的,而且用不同的类来做这件事比用一个可以处理所有事情的类来做要干净得多。如果你觉得你的 Activity 里面有太多代码,你甚至可能想让它们成为真正的外部类而不是内部类。 LoaderCallbacks
是一个接口(interface),因此您可以而且大多数情况下应该在它自己的类中实现它。
在构造函数中传递 Context
是可以的,只要您不保留对它的静态或其他缓存引用。
关于android - LoaderCallbacks 作为静态内部类(处理返回不同数据类型的多个 Loader),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787729/
我是一名优秀的程序员,十分优秀!