CursorAdapter 简介
Adapter:Responsible for making a list item view for each item in data source.
正如上面所说,适配器为数据源中的每个项创建列表项视图。例如,如果我们的数据源为 ArrayList 比如由文字组成的 ArrayList,那么我们就需要使用 ArrayAdapter 来填充列表。如果数据源是一个 Cursor,比如`”cursor of pets”“(前面宠物的例子),那我们就需要使用 CursorAdapter 来填充列表。
如上图所示,ListView 刚开始是空的,我们设置一个 CursorAdapter 与我们从 PetProvider 获得的宠物 Cursor 关联起来,同时确保 CursorAdapter 知道如何为每个宠物创建列表项视图。首先 ListView 将询问适配器最终要显示在界面上的列表有多少项,接下来从位置 0 开始请求每一项,适配器将 Cursor 移至第 0 行,提取此行的值,为该宠物设置正确的列表项,然后将此列表项回传至 ListView 。ListView 继续请求位置 1 的项,CursorAdpater 将 Cursor 移至第 1 行,读取其中的值,设置相应的列表视图,然后传回到 ListView。重复上面的动作,ListView 将持续请求每个位置的项,直到 Cursor 中没有宠物或屏幕已填满。
创建列表视图的过程
假设 ListView 要求位置 0 处的列表项,那么 CursorAdapter 首先需要创建一个空白列表项,这涉及到填充一个 xml 布局,该布局包括我们想要显示的内容控件。然后我们需要使用 Cursor 中的正确数据填充我们的内容控件。由于我们感兴趣的是位置 0 处的宠物,我们将 Cursor 位置移动到 0 行,提取出需要展示的内容,将内容填充到我们的列表项。
Populating a ListView with a CursorAdapter
CursorLoader 简介
主线程负责处理全部用户输入和所有绘制操作,如果 Activity 在主线程上执行时间密集型的工作,可能会使应用卡住,甚至停止对用户输入做出响应。所以不要在主线程执行任何运行时间