Android应用程序用户界面(六)

本文介绍如何使用适配器视图如列表视图和网格视图,在Android应用中动态构建布局并绑定数据。文章详细解释了两种常用适配器——数组适配器和简单游标适配器的工作原理及使用方法。

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

当你的布局内容是动态的或者不是事先确定的,你可以使用一个继承自适配器视图(AdpaterView)的布局在运行时利用视图元素构建布局。适配器视图类的子类使用一个适配器将数据和它的布局绑定。适配器(Adapter)作为一个数据源和适配器视图布局之间的中间件,适配器获取数据(从数组或者数据库中)并且将每一项转换为视图元素并添加到适配器视图布局中。由适配器支持的布局包括列表视图和网格视图。

使用数据填充适配器视图

你可以通过将一个适配器视图实例绑定到一个适配器上构建一个适配器视图(例如列表视图或网格视图),适配器从一个外部数据源中获取数据并且创建一个显示每个数据的视图。

Android提供了几个适配器的子类,来帮助获取各种各样的数据并为每个适配器视图创建视图。两个最常用的适配器是数组适配器(ArrayAdapter)和简单游标适配器(SimpleCursorAdapter)。

数组适配器

当你的数据源是数组时,可以使用这个适配器。默认情况下,数组适配器通过调用每个元素的toString()方法并且将内容放置在一个文本视图(TextView)来为每个数组项创建一个视图。

例如,如果你有一个你想要显示在列表视图中的字符串数组,你可以使用一个构造函数来初始化一个新的数组适配器,为每个字符串和字符串矩阵指定布局:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout_simple_list_item_1, myStringArray);

这个构造器的参数为:你的应用程序上下文,为数组中的每一个字符串包含一个文本视图的布局和字符串数组。
然后简单地调用列表视图的setAdapter()方法。

ListView listView = (ListView) findViewById(R.id.listview);
listview.setAdapter(adapter);

为了定制每项的外观,你可以重载你的数组中的对象的toString()方法。如果你想要为每一项创建一个新的视图,而不是简单的一个文本视图(例如,为每一个数组元素安排一个图像视图(ImageView)),那么需要扩展数组适配器类并且重载其getView()方法来返回你想要为每一项安排的视图类型。

简单游标适配器

当你的数据来自于一个游标时,使用这个适配器。当使用简单游标适配器时,你必须为游标中的每一行指定一个使用的布局,并指定游标中的哪些列应该插入该布局中的哪些视图。例如,如果你想要创建一列人名和电话号码,你可以执行一个返回游标的查询,该游标中每个人占一行,列包括名字和号码。然后你可以创建一个字符串数组指定这个游标中的哪些列你想要显示在布局中,并且创建一个整数矩阵指定每一列应该放置的相应的视图。

String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER);
int[] toViews={R.id.display_name, R.id.phone_number);

当你实例化简单游标适配器时,将每个结果使用的布局、包含结果数据的游标和上述两个矩阵传给它:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.person.name_and_number, cursor, froColumns, toViews, 0);
ListView listView = getListView();
listView.setAdapter(adapter);

简单游标适配器之后通过将每一个在fromColumns的项插入提供的布局中对应的toViews视图中为每一行创建一个视图。

如果在你的应用程序的生命周期中,你改变了供你的适配器读的数据,你应该调用notifyDataSetChanged()方法通知相关的视图刷新。

处理点击事件

你可以通过实现AdapterView.OnItemClickListener接口响应适配器视图中的每一项的点击事件,。例如:

private OnItemClickListener mMessageClickedHandler = new OnItemClickListener(){
    public void onItemClick(AdapterView parent, View v, int position, long id)
    {
    }
}   

listView.setOnItemClickListener(mMessageClickedHandler);  

原文

http://wear.techbrood.com/guide/topics/ui/declaring-layout.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值