android provider 图片,使用ContentProvider提供数据源(一)ListView中显示图片

本文详细指导了如何在ListView中显示图片,通过ContentProvider管理联系人数据,包括数据库设计、ContentMeta类、MainActivity的列表展示及增删改查操作。同时展示了如何通过Menu添加Contact功能并跳转到ContactActivity进行信息录入和编辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何在ListView的视图里显示图片呢?很多初学者应该会被这个问题难倒,因为既不知道如何浏览图片,也不知道如何将图片嵌入到ListView中。这边就演示一个例子将图片嵌入到ListView中,并使用ContentProvider对ListView里的数据进行增删改查。

首先需要一个sqlite数据库文件,因为我们要使用ContentProvider跟它进行交互。我们先确定表结构,在这边我们创建一个有5列的表,表名是:contact,表结构如下图所示:

15570735_1.png

这边我们设置_id是Integer型,是主键,age是Integer型,其他则都是TEXT型。avatar是用来记录图片的Uri路径,我们不把图片的二进制信息记录到数据库中,因为读取数据库中的二进制肯定没有直接读取文件快。对应这个数据库表结构,创建一个类来记录列信息和访问它对应的Uri。

ContentMeta.java:

接着创建一个MainActivity.java,这个类主要用来将所有的Contact信息显示到ListView中,并添加Option Menu,让用户可以添加Contact,同时监听ListView的click事件,当用户点击Contact时可以对其进行编辑。

list_item_contact.xml

上面代码通过ContentProvider来获取ListView的数据源,所以当这个Activity在onCreate中调用managedQuery方法时,Android OS就会根据第一个参数Uri的格式来确定由哪个ContentProvider来处理这个查询请求,而到这里我们都还没编写任何ContentProvider,所以接下来要做的就是编写一个ContentProvider。这个ContentProvider的主要功能就是与Sqlite数据库进行交互,它就像是一个中间者,Activity通过Uri跟它进行交互,它通过判断Uri的格式(了解Uri),跟内部对应的Sqlite数据库表进行交互,这样分层的架构逐步降低复杂度,使代码更清晰,使维护代码变得更简单。

因为ContentProvider需要有一个内部的Sqlite数据库,所以我们在其内部编写一个私有静态内部类,用来操作内部的数据库。

上面的数据库helper类,需要引用到数据库的文件名、表名、版本信息。所以我们需要在ContentProvider的顶部先定义这些控制信息,同时配置UriMatcher让ContentProvider能使用它对Uri格式进行解析:

然后要做的就是重写ContentProvider中的增删改查方法,并在它的onCreate方法中创建一个数据库连接辅助对象,就是上面的DatabaseHelper类。

接下来我们首先写重写query方法,因为应用一进来就需要在ListView中显示Contact的信息,所以会第一个先调用query方法,在这个方法里,我们要根据Uri的格式来做判断,因为Uri要读取的可能是目录信息,也可能是单条信息:

目录信息: content://com.android777.listviewimage/contacts

单条信息: content://com.android777.listviewimage/contacts/1

然后根据不同的信息对数据库做不同的查询操作,query方法代码如下:

然后记得要在AndroidMenifest.xml文件中声明改Provider:

代码的运行效果如下:

15570735_2.png

当用户点击menu菜单,需要提供一个按钮让其可以添加Contact信息,这个在上面MainActivity代码中已经有了:

上面使用MenuInflater从资源文件中加载menu信息,然后当用户点击时创建一个Action是INSERT的Intent,设置对应的Activity类是:ContactActivity.class,然后跳转到新建页面。person_list_options_menu.xml文件的信息如下:

这时候点击事件也有了,添加Contact菜单的事件也有了,还缺少一个用来显示和添加Contact信息的界面:ContactActivity.java ,我们可以先创建它,然后先不用写任何东西。现在运行起来效果是:

15570735_3.png

接下来下一篇就要编写ContactActivity界面,然后进行新增和修改操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值