代码:
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) { } }); }}
时间: 2024-10-01 04:56:17