Android 如何使用simpleAdapter

  使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局vlist.xml。下面做适配,new一个SimpleAdapter参数一次是:this,布局文件(vlist.xml),HashMap的 title 和 info,img。布局文件的组件id,title,info,img。布局文件的各组件分别映射到HashMap的各元素上,完成适配。

效果图:

       有按钮的ListView

       但是有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮。添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局文件上。但是事实并非这样,因为按钮是无法映射的,即使你成功的用布局文件显示出了按钮也无法添加按钮的响应,这时就要研究一下ListView是如何现实的了,而且必须要重写一个类继承BaseAdapter。下面的示例将显示一个按钮和一个图片,两行字如果单击按钮将删除此按钮的所在行。并告诉你ListView究竟是如何工作的。效果如下:

效果图:

 

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4 
 5 android:orientation="horizontal" 
 6 android:layout_width="fill_parent" 
 7 android:layout_height="fill_parent"> 
 8 <ImageView 
 9 android:id="@+id/img" 
10 android:layout_width="wrap_content" 
11 android:layout_height="wrap_content" 
12 android:layout_margin="5px"/>
13 
14 <LinearLayout 
15 android:orientation="vertical" 
16 android:layout_width="wrap_content" 
17 android:layout_height="wrap_content">
18 
19 
20 <TextView 
21 android:id="@+id/title" 
22 android:layout_width="wrap_content" 
23 android:layout_height="wrap_content" 
24 android:textColor="#FFFFFFFF" 
25 android:textSize="22px" />
26 
27 <TextView 
28 android:id="@+id/info" 
29 android:layout_width="wrap_content" 
30 android:layout_height="wrap_content" 
31 android:textColor="#FFFFFFFF" 
32 android:textSize="13px" /> 
33 </LinearLayout>
34 
35 <Button 
36 android:id="@+id/view_btn" 
37 android:layout_width="wrap_content" 
38 android:layout_height="wrap_content" 
39 android:text="@string/s_view_btn" 
40 android:layout_gravity="bottom|right" />
41 
42 </LinearLayout>
  1 /** 
  2 * @author allin 
  3 * 
  4 */
  5 
  6 public class MyListView4 extends ListActivity { 
  7 private List<Map<String, Object>> mData;
  8 
  9 @Override 
 10 public void onCreate(Bundle savedInstanceState) { 
 11 super.onCreate(savedInstanceState); 
 12 mData = getData(); 
 13 MyAdapter adapter = new MyAdapter(this); 
 14 setListAdapter(adapter); 
 15 }
 16 
 17 private List<Map<String, Object>> getData() { 
 18 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 
 19 Map<String, Object> map = new HashMap<String, Object>(); 
 20 map.put("title", "G1"); 
 21 map.put("info", "google 1"); 
 22 map.put("img", R.drawable.i1); 
 23 list.add(map); 
 24 map = new HashMap<String, Object>(); 
 25 map.put("title", "G2"); 
 26 map.put("info", "google 2"); 
 27 map.put("img", R.drawable.i2); 
 28 list.add(map); 
 29 map = new HashMap<String, Object>(); 
 30 map.put("title", "G3"); 
 31 map.put("info", "google 3"); 
 32 map.put("img", R.drawable.i3); 
 33 list.add(map); 
 34 return list; 
 35 }
 36 
 37 // ListView 中某项被选中后的逻辑 
 38 @Override 
 39 protected void onListItemClick(ListView l, View v, int position, long id) { 
 40 Log.v("MyListView4-click", (String)mData.get(position).get("title")); 
 41 }
 42 
 43 /** 
 44 * listview中点击按键弹出对话框 
 45 */
 46 
 47 public void showInfo(){ 
 48 new AlertDialog.Builder(this).setTitle("我的listview").setMessage("介绍...").setPositiveButton("确定", new DialogInterface.OnClickListener() {
 49 
 50 @Override 
 51 public void onClick(DialogInterface dialog, int which) { 
 52 } 
 53 }).show();
 54 
 55 }
 56 
 57 public final class ViewHolder{ 
 58 public ImageView img; 
 59 public TextView title; 
 60 public TextView info; 
 61 public Button viewBtn; 
 62 }
 63 
 64 public class MyAdapter extends BaseAdapter{ 
 65 private LayoutInflater mInflater; 
 66 public MyAdapter(Context context){ 
 67 this.mInflater = LayoutInflater.from(context); 
 68 }
 69 
 70 @Override 
 71 public int getCount() { 
 72 // TODO Auto-generated method stub 
 73 return mData.size();
 74 
 75 }
 76 
 77 @Override 
 78 public Object getItem(int arg0) { 
 79 // TODO Auto-generated method stub 
 80 return null; 
 81 }
 82 
 83 @Override 
 84 public long getItemId(int arg0) { 
 85 // TODO Auto-generated method stub 
 86 return 0; 
 87 } 
 88 @Override 
 89 public View getView(int position, View convertView, ViewGroup parent) { 
 90 ViewHolder holder = null; 
 91 if (convertView == null) { 
 92 holder=new ViewHolder(); 
 93 convertView = mInflater.inflate(R.layout.vlist2, null); 
 94 holder.img = (ImageView)convertView.findViewById(R.id.img); 
 95 holder.title = (TextView)convertView.findViewById(R.id.title); 
 96 holder.info = (TextView)convertView.findViewById(R.id.info); 
 97 holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn); 
 98 convertView.setTag(holder); 
 99 }else { 
100 holder = (ViewHolder)convertView.getTag(); 
101 } 
102 holder.img.setBackgroundResource((Integer)mData.get(position).get("img")); 
103 holder.title.setText((String)mData.get(position).get("title")); 
104 holder.info.setText((String)mData.get(position).get("info")); 
105 holder.viewBtn.setOnClickListener(new View.OnClickListener() {
106 
107 @Override 
108 public void onClick(View v) { 
109 showInfo(); 
110 } 
111 });
112 
113 return convertView; 
114 } 
115 }
116 
117 }

 

 

posted on 2012-04-26 00:06  simpleceo  阅读(442)  评论(0编辑  收藏  举报

导航