您的位置:首页 > 移动开发 > Android开发

android中SimpleAdapter

2015-10-08 00:23 302 查看
代码:

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.*;

public class MainActivity extends Activity {
private String[] names=new String[]{
"虎头","弄玉","李清照","李白"};
private String[] descs=new String[]{
"可爱的小孩","一个擅长音乐的女孩","一个擅长文学的女性","浪漫主义诗人"
};
private int[] imageIds=new int[]{
R.drawable.tiger,R.drawable.nongyu,R.drawable.qingzhao,R.drawable.libai
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Map<String,Object>> listItems=new ArrayList<Map<String,Object>>();
/**
*  创建一个List集合,List集合中的元素是Map.List可以理解为链表,这个链表中的元素是Map类,Map是由String到Object的映射。
*  arraylist是list的一种,它继承于list,有所有list的特性,并且它不再是一个抽象类,它的存储方式是连续存储,这就是他的一个实现方法。
*  还有一种linkedlist也是list的一种,它也继承于list,它的存储方式不是连续存储,而是通过第i个找到第i+1个(如果有的话)。
*  当只是需要用到list的特性的时候,并不用关注它是arraylist还是linkedlist。
*  所以定义的时候是用list而new实体的时候用的arraylist,这样是允许的。
*  只是这样做的后果是listItems明明是ArrayList但是却不能使用ArrayList有而list没有的特点。
*  HashMap是Map的一种,他有一个算法使它能快速的通过key找到value。
*  可以简单的认为list是通过下标找对象而Map是通过key找对象,
*/
for(int i=0;i<names.length;i++){
Map<String,Object> listItem=new HashMap<String,Object>();
listItem.put("header",imageIds[i]);
listItem.put("personName",names[i]);
listItem.put("desc",descs[i]);
listItems.add(listItem);
}
SimpleAdapter simpleAdapter=new SimpleAdapter(this,listItems,R.layout.simple_item,
new String[]{"personName","header","desc"},
new int[]{R.id.name,R.id.header,R.id.desc});
/**
* 创建了一个SimpleAdapter,需要五个参数:
* 第二个参数:应该是一个List<? extends Map<String,?>>类型的集合对象,该集合中的每个Map<String,?>对象生成一个列表项
* 第三个参数:指定一个界面布局的ID,意味着使用该文件作为列表项组件
* 第四个参数:该参数应该是一个String[]类型的参数,决定提取Map<String,?>对象中哪些key对应的value来生成列表项
* 第五个参数:该参数应该是一个int[]类型的参数,该参数决定填充哪些组件
*/
ListView list=(ListView)findViewById(R.id.mylist);
list.setAdapter(simpleAdapter);

/**
* 为单击事件添加监听器
*/
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//第position项被单击时激发该方法
@Override
/**
* parent相当于listView list适配器的一个指针,可以通过它获得list里面装着的一切东西
* view是点击某一项获得点击那一项控件id后操作控件
* position是点击的项在list适配器中的位置(生成listView时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listView里,意思就是这个项是第position号做好的)
* id是点击的项在listView里面第几行的位置,大部分时候position和id的值是一样的
*/
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println(names[position] + "被单击了");
}
});
/**
* 为选中事件添加监听器
*/
list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
//第position项被选中时激发该方法
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
System.out.println(names[position] + "被选中了");
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: