Day7、ListView和适配器Adapter二

来源:互联网 发布:英雄无敌5mac作弊 编辑:程序博客网 时间:2024/06/05 03:33

一、再脑补一下,数据块:负责具体的逻辑和数据内容代码;视图块:负责具体的展示形式,即长什么样子;适配器块:负责把数据内容以何种姿势显示到视图上。

这里写图片描述

二、使用SimpleAdapter实现简单的图文混搭列表

1.在布局文件中编写代码

第一步:添加ListView标签(listview.xml)
第二步:编写行布局文件(item.xml)

2.在Activity中编写代码

第一步:获取ListView对象
第二步:准备数据源(List)
第三步:配置适配器(SimpleAdapter)
第三步:将适配器关联到ListView

3.代码块

<!--1、listview.xml代码--><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ListView         android:id="@+id/lv_play"        android:layout_width="match_parent"        android:layout_height="wrap_content"/></LinearLayout>
<!--2、item.xml代码--><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ListView         android:id="@+id/lv_play"        android:layout_width="match_parent"        android:layout_height="wrap_content"/></LinearLayout>
//MainActivity.java代码package com.oldtogether.adapterdemo2;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends ActionBarActivity {    // 创建数组,采用for循环进行遍历    private int[] imageIds = new int[] { R.drawable.daxiang, R.drawable.maozi, R.drawable.nangua, R.drawable.nanguobq,            R.drawable.tiaopi, R.drawable.xiaolian, R.drawable.xin,R.drawable.weixin,R.drawable.hongx,R.drawable.xm };    private String[] titles = new String[] { "卖萌大象", "圣诞帽子", "愤怒南瓜", "难过表情", "调皮表情", "我倩的笑脸表情", "oldtogether爱心","微信","粉色少女心","一代撸" };    private String[] versions = new String[] { "版本:1.10", "版本:2.10", "版本:1.11", "版本:2.12", "版本:3.10", "版本:2.20","版本:5.20","版本:1.23","版本:2.21","版本:2.40", };    private String[] sizes = new String[] { "大小:32.01M", "大小:32.02M", "大小:23.01M", "大小:11.01M", "大小:41.01M","大小:11.01M","大小:33.01M","大小:33.01M","大小:33.01M","大小:33.01M",};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listview);        // 1、过的ListView对象        ListView lv = (ListView) findViewById(R.id.lv_play);        // 2、数据源        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();        for (int i = 0; i < titles.length; i++) {            Map<String, Object> map = new HashMap<String, Object>();            map.put("logo", imageIds[i]);            map.put("title", titles[i]);            map.put("version", versions[i]);            map.put("size", sizes[i]);            list.add(map);        }        // 3、设置适配器        SimpleAdapter adapter = new SimpleAdapter(this, // context上下文                list, // 数据源                R.layout.item, // 自定义的行布局                new String[] { "logo", "title", "version", "size" }, // 数据的来源,即key值                new int[] { R.id.iv_logo, R.id.title, R.id.version, R.id.size });// 与key值关联,根据id获得具体的资源        // 4、关联适配器        lv.setAdapter(adapter);    }}

4.运行结果

这里写图片描述
这里写图片描述

三、心得总结

1.如果把界面比喻成一张宣纸,listview.xml文件的作用就像练毛笔字的米字形方格,假如要写一个“恒”字,那么行布局item.xml就是用黑色墨汁写的“恒”字,如果要在整张纸上用不同的颜色颜料写很多“恒”字,那么需要准备数据不同颜色的颜料,那么需要添加数据源。

2.自定义数据源时,对于大量的重复操作,则采用for循环,将所需的资源归纳到不同类型的数组中,遍历它即可。

3.设置适配器,和ArrayAdapter相比较,SimpleAdapter多了两个参数,并且此时添加的layout为自定义的行布局(而并非系统提供的行布局),这样可以将我们的逻辑本质(在米字方格中写不同的字)实现;而多出来的两个参数则是 from…to的意思,必须一一对应;即数据从哪里来,去哪里,去哪里得到资源的id,然后一一展现在“这张纸”上。

4.关于字体颜色,为了明显模拟器的运行效果,这里选择了蓝色作为对比,而我们常见的颜色是灰色(#eee)。

5.次Demo中常见的错误,在运行时,会出现xxxxxx stop.原因是出现空指针,原因在,在new数组时,会少写数组内的元素,比如上面代码中,假设有了title,version,size,但是在imageIds上了一一对应的图片资源。

四、夜深人静,12份的第一天刚刚开始,待会儿早餐记得喝包milk,美好的一天从奶子开始,全世界晚安。。。。

0 0
原创粉丝点击