安卓学习笔记:ListView的用法

本文详细介绍如何在Android中使用ListView展示复杂数据,包括自定义数据类型、创建ArrayAdapter及ViewHolder模式的应用。

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

ListView显示列表数据,内容可以简单的就是一行行的字符串,也可以复杂到每一行数据就是包含特定排版格式的数字、字符串、图像等的组合。
简单的纯字符串的ListView的使用方法如下:
1.先引用在布局中设计好的ListView组件:

ListView listView=(ListView) findViewById(R.id.list_view_xxx);

2.准备好ListView要使用的字符串数据,由于字符串好多个(一行一行的),所以字符串数据要封装在ArrayAdapter中:例如:

String[] data={"Apple","Samsung","Huawei","Xiaomi","Oppo"}
ArrayAdapter<String> adatpter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,data); 

3.listview组件使用数据:

listView.setAdapter(adapter); 

总结一下:从简单数据的ListView可以看出:ListView需要的数据必须封装在ArrayAdapter里面,而ListView怎么显示数据也不是ListView决定的,而是由这个ArrayAdapter决定。
因此,要实现复杂数据的列表显示,我们需要做的主要有两步:
1.定义这个复杂数据
2.定义这个新的ArrayAdapter,当然,新的ArrayAdapter一定派生自ArrayAdapter。
暂停一下,了解一下ArrayAdapter构造函数的三个参数:
new ArrayAdapter(context,resource_id,data)
分别是adapter的上下文,显示数据的layout和数据。对于字符串等简单数据,安卓系统内置了一些简单的布局可以显示数据,比如上面的:android.R.layout.simple_list_item_single_choice,其他还有什么:android.R.layout.simple_list_item_1等等。

下面就是扩展了:

比如我们要显示的数据包含:
1.商品图片
2.商品名称
3.商品描述
4.商品价格
每一行数据类似手机淘宝的搜索结果一样:
在这里插入图片描述
要把这样的数据显示在ListView里面,当让首先需要定义这样的一个数据:

public class Commodity{
	private String name;
	private int resource_id;
	private String discription;
	private float price;
	public Commodity(String name,int resource_id,String discreption,float price){
		this.name=name;
		this.resource_id=resource_id;
		this.discription=discription;
		this.price=price;
	}
	public String getName(){
		return name;
	}
	...此处省略其他类似的getXXX函数
}

第二步,新建一个水果列表类,这个类派生自ArrayAdapter

public class CommodityArrayAdapter extends ArrayAdapter<Commodity> {
	private int resourceID; //显示数据的layout 的id
	//注意,类名定义里面定义了这个ArrayAdapter的每一个数据是我们定义的商品类的数据
	//接着定义构造函数,显然应该包含我们上满总结的三个参数
	//其中注意data的定义,要将Commodity类型的数据装配为列表型里面才可以,简单类型可以如String[],复杂结构体数据必须借助List类,后面讲这个
	public CommodityArrayAdapter(Context context,int resource_id,List<Commodity>data){
		super(context,resource_id,data);
		resourceID=resource_id;
	}
	//关键的一个函数,getView(),是父类的重写.这个函数负责填写我们设计的数据显示页面(这个页面就是一个layout,记得上面写的resource_id这个参数吗)
	@Override
	public View getView(int position, View convertView, ViewGroup parent){
		Commodity commodity=getItem(position);//这个position就是列表每一个数据的索引位置
		View view;
		ViewHolder viewHolder;//ViewHolder的用处看:[这里](https://www.jianshu.com/p/a14feb480804)
		if(convertView==null){
	 		view = LayoutInflater.from(getContext()).inflate(resourceID, parent, false); //Layout inflation是在android系统中使用的术语,当XML布局资源被解析并转换成View对象时会用到.
			viewHolder = new ViewHolder();
			//下面把显示布局里面的显示组件绑定到ViewHolder里面
			ImageView commodityImage= (ImageView) view.findViewById (R.id.commodity_image);
			ViewHolder.commodityName = (TextView) view.findViewById (R.id.commodity_name);
			ViewHolder.commodityImage= (TextView) view.findViewById (R.id.commodity_image);
			ViewHolder.commodityDiscription= (TextView) view.findViewById (R.id.commodity_discription);
			ViewHolder.commodityPrice= (TextView) view.findViewById (R.id.commodity_price);
			view.setTag(viewHolder)
			}
		else{
			view=convertView;
			viewHolder=(ViewHolder) view.getTag();
		}
		commodityImage.setImageResource(commodity.getImage());
		//..以下雷同
		commodityName.setText(commodity.getName());
       		return view;
	}
}
//这里定义一下ViewHolder
class ViewHolder{
	ImageView commodityImage;
	TextView commodityName;
	TextView commodityDiscription;
	TextView commodityPrice;
}

所有的数据类型都搞定了。下面需要准备的包括:
1.准备数据,包括文本数据:产品名称、描述、价格。还有图片数据,建议保存在res\drawable目录下,图片名称不支持中文
2.设计一个layout,用来显示一个商品数据。
OK,现在搞定。可以像普通数据那样的步骤来在ListView中显示这些数据了。运行结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值