- ListView是一个显示一列可滚动项目的视图组。 系统使用Adapter自动将列表项目插入列表,适配器从来源(例如数组或数据库查询)提取内容,并将每个项目结果转换为视图放置到列表中。
- 有关如何使用适配器动态插入视图的介绍,请阅读使用适配器构建布局。
- 使用加载器
- 使用CursorLoader是以异步任务形式查询Cursor的标准方式,可避免查询阻塞应用的主线程。 当CursorLoader接收到Cursor结果时,LoaderCallbacks会收到对onLoadFinished()的回调,从中您可以使用新的Cursor更新Adapter,然后列表视图会显示结果。
- 虽然CursorLoaderAPI 首先是在 Android 3.0(API 级别 11)中引入,但支持库中也有提供,因此您的应用可在使用这些 API 的同时,仍为 Android 1.6 或更高版本的设备提供支持。
- 如需了解有关使用Loader异步加载数据的详细信息,请参阅加载器指南。
- 示例
- 下例使用ListActivity,该 Activity 包含一个ListView作为其仅有的默认布局元素。 它对联系人提供程序执行查询,以获取姓名和电话号码清单。
- Activity 实现LoaderCallbacks接口,以使用CursorLoader为列表视图动态加载数据。
- public class ListViewLoader extends ListActivity implements LoaderManager.LoaderCallbacks { // This is the Adapter being used to display the list's data SimpleCursorAdapter mAdapter; // These are the Contacts rows that we will retrieve static final String[] PROJECTION = new String[] {ContactsContract.Data._ID, ContactsContract.Data.DISPLAY_NAME}; // This is the select criteria static final String SELECTION = "((" + ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" + ContactsContract.Data.DISPLAY_NAME + " != '' ))"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create a progress bar to display while the list loads ProgressBar progressBar = new ProgressBar(this); progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER)); progressBar.setIndeterminate(true); getListView().setEmptyView(progressBar); // Must add the progress bar to the root of the layout ViewGroup root = (ViewGroup) findViewById(android.R.id.content); root.addView(progressBar); // For the cursor adapter, specify which columns go into which views String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME}; int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1 // Create an empty adapter we will use to display the loaded data. // We pass null for the cursor, then update it in onLoadFinished() mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, fromColumns, toViews, 0); setListAdapter(mAdapter); // Prepare the loader. Either re-connect with an existing one, // or start a new one. getLoaderManager().initLoader(0, null, this); } // Called when a new Loader needs to be created public Loader onCreateLoader(int id, Bundle args) { // Now create and return a CursorLoader that will take care of // creating a Cursor for the data being displayed. return new CursorLoader(this, ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null, null); } // Called when a previously created loader has finished loading public void onLoadFinished(Loader loader, Cursor data) { // Swap the new cursor in. (The framework will take care of closing the // old cursor once we return.) mAdapter.swapCursor(data); } // Called when a previously created loader is reset, making the data unavailable public void onLoaderReset(Loader loader) { // This is called when the last Cursor provided to onLoadFinished() // above is about to be closed. We need to make sure we are no // longer using it. mAdapter.swapCursor(null); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // Do something when a list item is clicked }}
- 注:由于此示例在联系人提供程序中执行查询,因此,如果您想要试用此代码,您的应用必须在清单文件中请求READ_CONTACTS权限:
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-05/19986833.html