我刚刚深入了解Loader API,并使用CursorLoader
和AsyncTaskLoader
来填充和管理ListViews
。我的数据来自一个JSON API端点,所以我使用Reform来执行网络任务,目前使用AsyncTask
。
在AsyncTaskLoader
中重新实现这一点并使用SimpleCursorAdapter
是否有意义?因为现在这没有意义,我没有Cursor,因为我的数据没有ContentProvider
支持,例如访问数据库或类似的情况。
我应该只使用AsyncTask
和ArrayAdapter
,还是有办法使用新的API?
使用AsyncTaskLoader是个好主意。您可能不必使用SimpleCursorAdapter,而是使用默认的ArrayAdapter或构建适合您需要的自定义适配器。不需要游标,因为您的数据没有由ContentProvider支持。
通过实现自定义数组适配器,您还可以在ListViews 中实现自定义过滤器
使用Reform,您不必担心AsyncTasks和Loaders-Reform已经支持开箱即用的异步执行。您可以使用回调作为最后一个参数来声明Reform的方法。
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
然后,您所需要做的就是使用接收到的列表创建Adapter,并将此Adapter设置为您的ListView。
此外,Reform的方法可以生成RxJava Observable。这也是异步操作。你可以在这里阅读更多关于这个主题的内容。
关于适配器的问题,您不需要使用CursorAdapter,因为您的数据源不是SQLite数据库或ContentProvider