Android 如何使用simpleAdapter

转自http://android.tgbus.com/Android/tutorial/201106/356758.shtml

使用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究竟是如何工作的。效果如下:

效果图:

java代码:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<ImageView 
android:id="@+id/img" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_margin="5px"/>

<LinearLayout 
android:orientation="vertical" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content">


<TextView 
android:id="@+id/title" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textColor="#FFFFFFFF" 
android:textSize="22px" />

<TextView 
android:id="@+id/info" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textColor="#FFFFFFFF" 
android:textSize="13px" /> 
</LinearLayout>

<Button 
android:id="@+id/view_btn" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/s_view_btn" 
android:layout_gravity="bottom|right" />

</LinearLayout>

java代码:
/** 
* @author allin 
* 
*/

public class MyListView4 extends ListActivity { 
private List<Map<String, Object>> mData;

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
mData = getData(); 
MyAdapter adapter = new MyAdapter(this); 
setListAdapter(adapter); 
}

private List<Map<String, Object>> getData() { 
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 
Map<String, Object> map = new HashMap<String, Object>(); 
map.put("title", "G1"); 
map.put("info", "google 1"); 
map.put("img", R.drawable.i1); 
list.add(map); 
map = new HashMap<String, Object>(); 
map.put("title", "G2"); 
map.put("info", "google 2"); 
map.put("img", R.drawable.i2); 
list.add(map); 
map = new HashMap<String, Object>(); 
map.put("title", "G3"); 
map.put("info", "google 3"); 
map.put("img", R.drawable.i3); 
list.add(map); 
return list; 
}

// ListView 中某项被选中后的逻辑 
@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
Log.v("MyListView4-click", (String)mData.get(position).get("title")); 
}

/** 
* listview中点击按键弹出对话框 
*/

public void showInfo(){ 
new AlertDialog.Builder(this).setTitle("我的listview").setMessage("介绍...").setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override 
public void onClick(DialogInterface dialog, int which) { 
} 
}).show();

}

public final class ViewHolder{ 
public ImageView img; 
public TextView title; 
public TextView info; 
public Button viewBtn; 
}

public class MyAdapter extends BaseAdapter{ 
private LayoutInflater mInflater; 
public MyAdapter(Context context){ 
this.mInflater = LayoutInflater.from(context); 
}

@Override 
public int getCount() { 
// TODO Auto-generated method stub 
return mData.size();

}

@Override 
public Object getItem(int arg0) { 
// TODO Auto-generated method stub 
return null; 
}

@Override 
public long getItemId(int arg0) { 
// TODO Auto-generated method stub 
return 0; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
ViewHolder holder = null; 
if (convertView == null) { 
holder=new ViewHolder(); 
convertView = mInflater.inflate(R.layout.vlist2, null); 
holder.img = (ImageView)convertView.findViewById(R.id.img); 
holder.title = (TextView)convertView.findViewById(R.id.title); 
holder.info = (TextView)convertView.findViewById(R.id.info); 
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn); 
convertView.setTag(holder); 
}else { 
holder = (ViewHolder)convertView.getTag(); 
} 
holder.img.setBackgroundResource((Integer)mData.get(position).get("img")); 
holder.title.setText((String)mData.get(position).get("title")); 
holder.info.setText((String)mData.get(position).get("info")); 
holder.viewBtn.setOnClickListener(new View.OnClickListener() {

@Override 
public void onClick(View v) { 
showInfo(); 
} 
});

return convertView; 
} 
}

}

posted on 2015-03-29 20:11  wwicked  阅读(177)  评论(0编辑  收藏  举报

导航