List列表-Adapter简单使用

本文详细介绍了Android中ListView的使用,包括BaseAdapter和SimpleAdapter的实现,如何在列表中添加事件,以及如何处理复杂的列表布局,如嵌套列表、ScrollView嵌套、横向排列和添加GradView等。

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

一、简单的list列表使用

baseAdapter、SimpleAdapter


二、list列表中添加事件

list列表布局

加载离线数据、获取网络数据

点击事件,延展、收起数据等

三、listview列表嵌套listview、ScrollView下嵌套listview、横向排列、添加GradView等复杂的列表



1、ArrayAdapter

①          // 列表项的数据
String[] strs = { "1", "2", "3", "4", "5" ,"1", "2", "3", "4", "5","1", "2", "3", "4", "5"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1, strs);
/*
* ArrayAdapter的构造需要三个参数,依次为
* this,

* 布局文件(注意这里的布局文件描述的是列表的每一行的布局,

                * android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,

* 数据源(一个List集合)。同时用setAdapter()完成适配的最后工作。
*/

setListAdapter(adapter);



②  上一个例子中的strs字符串数组也可以设置成list列表

               ListView listView = new ListView(this);
listView.setAdapter(new ArrayAdapter<String>(this,

android.R.layout.simple_expandable_list_item_1, getData()));

               setContentView(listView);

添加方法getData();

          private List<String> getData() {
List<String> data = new ArrayList<String>();
data.add("测试数据1");
data.add("测试数据2");
data.add("测试数据3");
data.add("测试数据4");
return data;

 }

2、SimpleAdapter

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
               /*
* 使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行
*/
SimpleAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.test_simpleadapter, new String[] { "title", "img","content" },
new int[] { R.id.title,R.id.img, R.id.content});
setListAdapter(adapter);

 getData()获取数据源

private List<Map<String, Object>> getData() {
// map.put(参数名字,参数值)
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "摩托罗拉");
map.put("img", R.drawable.zem13);
map.put("content", "简介");
list.add(map);

map = new HashMap<String, Object>();
map.put("title", "诺基亚");
map.put("img", R.drawable.zem12);
map.put("content", "简介");
list.add(map);

map = new HashMap<String, Object>();
map.put("title", "三星");
map.put("content", "简介");
map.put("img", R.drawable.zem12);

list.add(map);

return list;
}

/*
* ListView 

* ListView的原理:ListView中的每一个Item显示都需要Adapter调用一次getView的方法,
* 这个方法会传入一个convertView的参数,返回的View就是这个Item显示的View。如果当Item的数量足够大,
* 再为每一个Item都创建一个View对象
* ,必将占用很多内存,创建View对象(mInflater.inflate(R.layout.lv_item, null);
* 从xml中生成View,这是属于IO操作)也是耗时操作,所以必将影响性能。Android提供了一个叫做Recycler(反复循环器)的构件,
* 就是当ListView的Item从上方滚出屏幕视角之外,对应Item的View会被缓存到Recycler中,相应的会从下方生成一个Item,
* 而此时调用的getView中的convertView参数就是滚出屏幕的Item的View
* 所以说如果能重用这个convertView,就会大大改善性能。
*/

/*
     * listView在开始绘制的时候,系统首先调用getCount()函数,
     * 根据他的返回值得到listView的长度(这也是为什么在开始的第一张图特别的标出列表长度),
     * 然后根据这个长度,调用getView()逐一绘制每一行。如果你的getCount()返回值是0的话,
     * 列表将不显示同样return 1,就只显示一行。
     * 
     * 系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。
     * 当手动完成适配时,必须手动映射数据,这需要重写getView()方法。
     * 系统在绘制列表的每一行的时候将调用此方法。
     * getView()有三个参数,position表示将显示的是第几行,
     * covertView是从布局文件中inflate来的布局。我
     * 们用LayoutInflater的方法将定义好的vlist2.xml文件提取成View实例用来显示。
     * 然后将xml文件中的各个组件实例化(简单的findViewById()方法)。
     * 这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为它添加点击监听器,
     * 这样就能捕获点击事件。至此一个自定义的listView就完成了,现在让我们回过头从新审视这个过程。
     * 系统要绘制ListView了,他首先获得要绘制的这个列表的长度,然后开始绘制第一行,
     * 怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(实际上是一个ViewGroup),
     * 然后再实例并设置各个组件,显示之。好了,绘制完这一行了。那再绘制下一行,直到绘完为止。
     * 在实际的运行过程中会发现listView的每一行没有焦点了,这是因为Button抢夺了listView的焦点,
     * 只要布局文件中将Button设置为没有焦点就OK了。
     * 

     */

/*
* 一个Adapter是AdapterView视图与数据之间的桥梁,Adapter提供对数据的访问,
* 也负责为每一项数据产生一个对应的View。

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值