Day7、ListView和适配器Adapter二

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

这里写图片描述

二、使用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,美好的一天从奶子开始,全世界晚安。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值