1.使用Holder
2.使用view.setTag(),view.getTag()
ListView中Button点击事件的实现
ListView 中实现Item中的Button事件,在实现Button事件时,最关键的事情是,当前button对于的Item的唯一标识,而如何保存这唯一标识到button中呢,
在View中包含了setTag 和getTag 一对方法,同过这样的方法可以在View’绑定时,把Item中的唯一标识 保存到Button的Tag中,并在Button的点击事件中读取标识。
例1:(来自网上)
/* */
public class CursorAdapter_ExecuteTheme extends CursorAdapter {
private LayoutInflater mInflater;
private Context mContext;
TextView theme_id;
public CursorAdapter_ExecuteTheme(Context context, Cursor c) {
super(context, c);
mContext = context;
mInflater = LayoutInflater.from(context);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
theme_id = (TextView) view.findViewById(R.id.theme_id);
TextView txt_themetitle = (TextView) view.findViewById(R.id.txt_themetitle);
TextView txt_themedescribe=(TextView) view.findViewById(R.id.txt_themedescribe);
ImageView img_exbut=(ImageView)view.findViewById(R.id.imgv_exbut);
theme_id.setText(cursor.getString(0));
txt_themetitle.setText(cursor.getString(2));
// //pk as _id,catalogFK,Name,3GuessCount,4State,5CurIndex,Describe from CLTheme
txt_themedescribe.setText("已做("+cursor.getString(5)+")全部("+cursor.getString(3) +")");
int state=cursor.getInt(4);
img_exbut.setTag(cursor.getString(0));
if((state==ProjectConstant.ThemeState_BEGGING)||(state==ProjectConstant.ThemeState_NONE))//主题开始
{
if(state==ProjectConstant.ThemeState_BEGGING)
img_exbut.setImageResource(R.drawable.cl_goon);
img_exbut.setOnClickListener(new ImageView.OnClickListener()
{
public void onClick(View v){
SoundManager.Instance.playSound("SOUND_WELCOME");
String id=v.getTag().toString();
//获取当前主题状态
//创建当前测试业务逻辑并加载选择的主题数据
ExerciseBussiness.SelectTheme(id,ProjectConstant.ThemeType_Classic ,mContext);
Intent i = new Intent((Activity)mContext,ExerciseGuess.class);
i.putExtra("themefk",id);
mContext.startActivity(i);
((Activity)mContext).finish();
}
});
}else if(state==ProjectConstant.ThemeState_END)//重新做
{
img_exbut.setImageResource(R.drawable.cl_redo);
img_exbut.setOnClickListener(new ImageView.OnClickListener()
{
public void onClick(View v){
SoundManager.Instance.playSound("SOUND_WELCOME");
String id=v.getTag().toString();
ExerciseBussiness.ReDoTheme(id ,mContext); //重新做题
Intent i = new Intent((Activity)mContext,ExerciseGuess.class);
i.putExtra("themefk",id);
mContext.startActivity(i);
((Activity)mContext).finish();
}
});
}
}
@Override
public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
return mInflater.inflate(R.layout.sub_extheme_item, arg2, false);
}
}
例2(自己的)
class CityListAdapter extends BaseAdapter {
private Context context;
private List<City> datas;
private List<City> downloadCitys;
public CityListAdapter(Context context, List<City> citys) {
this.datas = citys;
Log.w("dates", datas.size() + "");
this.context = context;
downloadCitys=(List<City>)AppCache.get("DOWNLOAD_CITYS");
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private CityListItem item;
@Override
public View getView(int position, View view, ViewGroup group) {
ViewHolder viewHolder;
item=null;
if(view==null){
viewHolder=new ViewHolder();
view = LayoutInflater.from(context).inflate(R.layout.city_listview,
null);
viewHolder.tvCityName = (TextView) view.findViewById(R.id.itemTitle);
viewHolder.btDownload = (Button) view.findViewById(R.id.id_download);
viewHolder.btDownload.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder _viewHolder=(ViewHolder)v.getTag();
download(_viewHolder);
}
});
view.setTag(viewHolder);
}else {
viewHolder=(ViewHolder)view.getTag();
}
item=itemMap.get(position);
if(item==null){
item=new CityListItem(datas.get(position));
updateView(item);
itemMap.put(position, item);
}
viewHolder.tvCityName.setText(item.tvCityName);
viewHolder.btDownload.setText(item.btDownload);
viewHolder.position=position;
viewHolder.btDownload.setTag(viewHolder);//标识 view对象
return view;
}
}
网摘 :ListView 编程: Adapter 何方神圣?