喝酒不骑马的Android自学日记(6)-ListView***2015年12月15日
言归正传
ListView:一个显示列表的控件
每一个ListView可以包含很多个列表项
数据适配器:把复杂的数据(数组、链表、数据库、集合等)填充在指定的视图界面上。
ArrayAdapter(数组适配器):用于绑定格式单一的数据,数据源可以是集合或数组
SimpleAdapter(简单适配器):用于绑定格式复杂的数据,数据源只能是特定泛型的集合
>>>数据适配器是链接数据源和View的桥梁
新建适配器→添加数据源到适配器→视图加载适配器
ArrayAdapter的样例:
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
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;
创建一个函数
这里,返回类型是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详解
代码:
2015年12月16日
------------------------------------------------------
艹蛋,沈航在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日
------------------------------------------------------