喝酒不骑马的Android自学日记(6)-ListView

喝酒不骑马的Android自学日记(6)-ListView***2015年12月15日


艹蛋,沈航在SB锐捷客户端垄断阴影的笼罩下,残害了多少风华正茂的骚年。Genymotion模拟器最终败给了锐捷,一打开模拟器就被检测多网卡而导致无情断网,真是日了狗了,没处讲道理。在家用顺得不行,在学校GG,只好再次掏出中兴小神机救急。好在马上放假回家了。




言归正传
ListView:一个显示列表的控件
每一个ListView可以包含很多个列表项


数据适配器:把复杂的数据(数组、链表、数据库、集合等)填充在指定的视图界面上。
ArrayAdapter(数组适配器):用于绑定格式单一的数据,数据源可以是集合或数组
SimpleAdapter(简单适配器):用于绑定格式复杂的数据,数据源只能是特定泛型的集合


>>>数据适配器是链接数据源和View的桥梁
新建适配器→添加数据源到适配器→视图加载适配器


ArrayAdapter的样例:
private ListView listView;
    private ArrayAdapter<String> arr_adapter;
    private SimpleAdapter simp_adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        //1.新建一个数据适配器
        //ArrayAdapter(上下文,当前ListView加载的每一个列表项所对应的布局文件,数据源)
        //2.适配器加载数据源
        String[] arr_data = {"喝酒不骑马1","喝酒不骑马2","喝酒不骑马3","喝酒不骑马4"};
        arr_adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr_data);
        //3.视图(ListView)加载适配器
        listView.setAdapter(arr_adapter);
    }




SimpleAdapter的建立
simp_adapter = new SimpleAdapter(context,data,resource,from,to)
这其中:
context:上下文
data:数据源(List<? extends Map<String, ?>> data)一个Map所组成的List集合
每一个Map都会去对应ListView列表中的一行
每一个Map(键-值对)中的键必须包含所有在from中所指定的键
键值对:所谓键值对,查看jdk文档,找MAP接口,它的实现类都是键值对的形式保存数据的
键:就是你存的值的编号
值:就是你要存放的数据
resource:列表项的布局文件ID
from:Map中的键名
to:绑定数据视图中的ID


首先,context为this指针,resource则是一个布局文件
在layout里新建一个item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/pic"
        android:layout_marginLeft="15dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>


    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="机器人"
        android:textSize="20sp"
        android:textColor="#000000"/>
</LinearLayout>




resource就是R.layout.item,to就是要绑定视图中的id。根据自定义的视图,to则为new int[]{R.id.pic,R.id.text}
from是字符串类型,要定义和to里视图相对应的键名,所以new String[]{"pic","Text"}


最后,处理data。
private List<Map<String(键名),Object(资源)>>dataList;
创建一个函数
 private List<Map<String,Object>> getData(){
        for(int i = 0;i < 20;i++){
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("pic",R.drawable.ic_launcher);
            map.put("text","喝酒不骑马" + i);
            dataList.add(map);
        }
        return dataList;
    }


这里,返回类型是List<Map<String,Object>>,这是一个特定的泛型。这里循环20次,目的是生成20行Map。每次定义个map,然后通过匹配键名把资源载入。最后把map添加到dataList里,dataList.add(map);


到此,data就该换成getData()
然后ListView.setAdapter(simp_adapter);
这样自定的视图就以每行的形式显示在ListView上了。




HashMap 是 Java Collection Framework 的重要成员,HashMap 是 Map 接口的常用实现类。对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统总是根据 Hash 算法来计算 key-value 的存储位置,这样可以保证能快速存、取 Map 的 key-value 对。也就是说:Java 集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的 Java 对象。 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java 对象放入数组中,只是把对象的引用放入数组中,每个数组元素都是一个引用变量。 


http://alex09.iteye.com/blog/539545 --java中HashMap详解




代码:
public class MainActivity extends Activity {
    private ListView listView;
    private ArrayAdapter<String> arr_adapter;
    private SimpleAdapter simp_adapter;
    private List<Map<String,Object>>dataList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        //1.新建一个数据适配器
        //ArrayAdapter(上下文,当前ListView加载的每一个列表项所对应的布局文件,数据源)
        //2.适配器加载数据源
        String[] arr_data = {"喝酒不骑马1","喝酒不骑马2","喝酒不骑马3","喝酒不骑马4"};
        dataList = new ArrayList<Map<String,Object>>();
        arr_adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr_data);
        //context:上下文
        //data:数据源(List)
        simp_adapter = new SimpleAdapter(this,getData(),R.layout.item,
                new String[]{"pic","text"},new int[]{R.id.pic,R.id.text});
        //3.视图(ListView)加载适配器
        listView.setAdapter(simp_adapter);
        //listView.setAdapter(arr_adapter);
    }


    private List<Map<String,Object>> getData(){
        for(int i = 0;i < 20;i++){
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("pic",R.drawable.ic_launcher);
            map.put("text","喝酒不骑马" + i);
            dataList.add(map);
        }
        return dataList;
    }






2015年12月16日
------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值