List View(列表视图)

列表视图

ListView 是一种可以显示可滚动项目的列表的ViewGroup。使用 Adapter 可以使列表项目会自动插入到列表在中,Adapter 从诸如数组或数据库查询结果的数据源获取数据并且把每个条目转化成可以添加到列表中的视图。

请阅读 Building Layouts with an Adapter 了解如何使用适配器动态的插入视图。

使用加载器


为了避免因为查询阻塞了应用主线程,使用 CursorLoader 是以异步任务查询 Cursor 的标准方式。当 CursorLoader 收到 Cursor 结果时,LoaderCallbacks 会接收到 onLoadFinished() 回调,在这里你使用新的 Cursor 更新你的 Adapter,然后列表视图会显示结果。

尽管 CursorLoader API直到Android 3.0(API等级11)才被引用进来,当支持的设备运行在Android 1.6或更高的平台上时你可以使用 Support Library 以便你的应用使用它们。

请查阅 Loaders 指南了解更多关于使用 Loader 异步加载数据的信息。

事例


下面是使用 ListActivity 的事例,默认情况下这个activity的布局元素只有一个 ListView。它向 Contacts Provider 查询姓名和电话号码列表。

为了使用 CursorLoader 给列表视图动态加载数据,activity需要继承 LoaderCallbacks 接口。

public class ListViewLoader extends ListActivity
        implements LoaderManager.LoaderCallbacks<Cursor> {

    // 被用来显示列表数据的适配器
    SimpleCursorAdapter mAdapter;

    // 需要获取的联系人的一些行信息
    static final String[] PROJECTION = new String[] {ContactsContract.Data._ID,
            ContactsContract.Data.DISPLAY_NAME};

    // 查询条件
    static final String SELECTION = "((" + 
            ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" +
            ContactsContract.Data.DISPLAY_NAME + " != '' ))";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 创建进度条在列表加载时显示
        ProgressBar progressBar = new ProgressBar(this);
        progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT, Gravity.CENTER));
        progressBar.setIndeterminate(true);
        getListView().setEmptyView(progressBar);

        // 必须将进度条添加到布局的跟视图中
        ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
        root.addView(progressBar);

        // 为适配器指定哪些列的数据插入到哪些视图中
        String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME};
        int[] toViews = {android.R.id.text1}; // simple_list_item_1中的TextView

        // 创建一个我们将要使用来显示加载数据的空的适配器
        // 把null传递给cursor,然后在onLoadFinished()中更新它
        mAdapter = new SimpleCursorAdapter(this, 
                android.R.layout.simple_list_item_1, null,
                fromColumns, toViews, 0);
        setListAdapter(mAdapter);

        // 准备加载器。要么使用已存在的重新连接,要么开启一个新的。
        getLoaderManager().initLoader(0, null, this);
    }

    // 需要创建新的加载器时被调用
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        // 现在创建并返回CursorLoad,它会负责创建显示数据的Cursor
        return new CursorLoader(this, ContactsContract.Data.CONTENT_URI,
                PROJECTION, SELECTION, null, null);
    }

    // 前面创建的加载器完成加载时调用
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        // 换入新的cursor。(一旦我们返回,框架会负责关闭旧的cursor)
        mAdapter.swapCursor(data);
    }

    // 前面创建的加载器被重置时调用,使数据不可用
    public void onLoaderReset(Loader<Cursor> loader) {
        // 当上面用于onLoadFinished()的最后的Cursor将要被关闭时调用。我们需要确保我们不再使用它。
        mAdapter.swapCursor(null);
    }

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) {
        // 点击列表项目时执行
    }
}

注解:由于这个事例是在 Contacts Provider 执行的查询,如果你想要试验这段代码,你的应用必须在清单文件中请求 READ_CONTACTS 权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值