android用户界面-组件Widget-列表视图ListView
ListView是比较常用的控件 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应。 列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View。 2.适配器 用来把数据映射到ListView上的中介。 3.数据 具体的将被映射的字符串,图片,或者基本组件。 根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter SimpleAdapter的例子如下: 首先在xml里面定义一个ListView 1.<?xmlversion="1.0"encoding="utf-8"?> 2.<LinearLayout 3.android:id="@+id/LinearLayout01" 4.android:layout_width="fill_parent" 5.android:layout_height="fill_parent" 6.xmlns:android="http://schemas.android.com/apk/res/android"> 7.<ListViewandroid:layout_width="wrap_content" 8.android:layout_height="wrap_content" 9.android:id="@+id/ListView01" 10./> 11.</LinearLayout> <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ListView01" /> </LinearLayout> 定义ListView每个条目的Layout,用RelativeLayout实现: 1.<?xmlversion="1.0"encoding="utf-8"?> 2.<RelativeLayout 3.android:id="@+id/RelativeLayout01" 4.android:layout_width="fill_parent" 5.xmlns:android="http://schemas.android.com/apk/res/android" 6.android:layout_height="wrap_content" 7.android:paddingBottom="4dip" 8.android:paddingLeft="12dip" 9.android:paddingRight="12dip"> 10.<ImageView 11.android:paddingTop="12dip" 12.android:layout_alignParentRight="true" 13.android:layout_width="wrap_content" 14.android:layout_height="wrap_content" 15.android:id="@+id/ItemImage" 16./> 17.<TextView 18.android:text="TextView01" 19.android:layout_height="wrap_content" 20.android:textSize="20dip" 21.android:layout_width="fill_parent" 22.android:id="@+id/ItemTitle" 23./> 24.<TextView 25.android:text="TextView02" 26.android:layout_height="wrap_content" 27.android:layout_width="fill_parent" 28.android:layout_below="@+id/ItemTitle" 29.android:id="@+id/ItemText" 30./> 31.</RelativeLayout> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip"> <ImageView android:paddingTop="12dip" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ItemImage" /> <TextView android:text="TextView01" android:layout_height="wrap_content" android:textSize="20dip" android:layout_width="fill_parent" android:id="@+id/ItemTitle" /> <TextView android:text="TextView02" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_below="@+id/ItemTitle" android:id="@+id/ItemText" /> </RelativeLayout> 最后在Activity里面调用和加入Listener,具体见注释: 1.packagecom.ray.test; 2. 3.importjava.util.ArrayList; 4.importjava.util.HashMap; 5. 6.importandroid.app.Activity; 7.importandroid.os.Bundle; 8.importandroid.view.ContextMenu; 9.importandroid.view.MenuItem; 10.importandroid.view.View; 11.importandroid.view.ContextMenu.ContextMenuInfo; 12.importandroid.view.View.OnCreateContextMenuListener; 13.importandroid.widget.AdapterView; 14.importandroid.widget.ListView; 15.importandroid.widget.SimpleAdapter; 16.importandroid.widget.AdapterView.OnItemClickListener; 17. 18.publicclassTestListViewextendsActivity{ 19.@Override 20.publicvoidonCreate(BundlesavedInstanceState){ 21.super.onCreate(savedInstanceState); 22.setContentView(R.layout.main); 23.//绑定Layout里面的ListView 24.ListViewlist=(ListView)findViewById(R.id.ListView01); 25. 26.//生成动态数组,加入数据 27.ArrayList<HashMap<String,Object>>listItem=newArrayList<HashMap<String,Object>>(); 28.for(inti=0;i<10;i++) 29.{ 30.HashMap<String,Object>map=newHashMap<String,Object>(); 31.map.put("ItemImage",R.drawable.checked);//图像资源的ID 32.map.put("ItemTitle","Level"+i); 33.map.put("ItemText","Finishedin1Min54Secs,70Moves!"); 34.listItem.add(map); 35.} 36.//生成适配器的Item和动态数组对应的元素 37.SimpleAdapterlistItemAdapter=newSimpleAdapter(this,listItem,//数据源 38.R.layout.list_items,//ListItem的XML实现 39.//动态数组与ImageItem对应的子项 40.newString[]{"ItemImage","ItemTitle","ItemText"}, 41.//ImageItem的XML文件里面的一个ImageView,两个TextViewID 42.newint[]{R.id.ItemImage,R.id.ItemTitle,R.id.ItemText} 43.); 44. 45.//添加并且显示 46.list.setAdapter(listItemAdapter); 47. 48.//添加点击 49.list.setOnItemClickListener(newOnItemClickListener(){ 50. 51.@Override 52.publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2, 53.longarg3){ 54.setTitle("点击第"+arg2+"个项目"); 55.} 56.}); 57. 58.//添加长按点击 59.list.setOnCreateContextMenuListener(newOnCreateContextMenuListener(){ 60. 61.@Override 62.publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenuInfomenuInfo){ 63.menu.setHeaderTitle("长按菜单-ContextMenu"); 64.menu.add(0,0,0,"弹出长按菜单0"); 65.menu.add(0,1,0,"弹出长按菜单1"); 66.} 67.}); 68.} 69. 70.//长按菜单响应函数 71.@Override 72.publicbooleanonContextItemSelected(MenuItemitem){ 73.setTitle("点击了长按菜单里面的第"+item.getItemId()+"个项目"); 74.returnsuper.onContextItemSelected(item); 75.} 76.} 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080693