本文实例讲述了Android开发实现ListView部分布局监听的方法。分享给大家供大家参考,具体如下:
android listview 部分布局监听,很多人会想,直接在适配器里面,拿到那个布局,添加点击事件就可以了,不过我会告诉你的是这时候position是错乱的,是无法根据用户点击的位置来对每个item进行相应的逻辑操作。 同事给我想到的一个办法是:给每个布局提前设置一个tag,也就是绑定对应需要设置的数据,在点击事件的时候,会有一个view,根据该view重新拿到这个tag,取得里面的数据,就可以了,防止错乱的问题,成功解决,大概的代码如下,因为加密的需要,很多代码省略:
// 适配器
public class OrAdapter extends BaseAdapter {
@Override
public int getCount() {
return dataMap.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = getActivity().getLayoutInflater().inflate(
R.layout.activity_order_item, null);
initViewHolder(convertView, viewHolder, position);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
refreshViewHolder(position, viewHolder);
return convertView;
}
private String getTag(String orderId, String instrument) {
StringBuilder sb = new StringBuilder();
sb.append(orderId).append(";").append(instrument);
return sb.toString();
}
private void refreshViewHolder(int position, ViewHolder viewHolder) {
// ------------------为了防止item被复用------------------
viewHolder.modeifyorder.setTag(getTag(orderid, instrument));
}
private void initViewHolder(View convertView, ViewHolder viewHolder,
final int position) {
viewHolder.modeifyorder = (RelativeLayout) convertView
.findViewById(R.id.modeifyorder);
viewHolder.modeifyorder.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int isman = (Integer) dataMap.get(position).get("ismanual");
int isprice = (Integer) dataMap.get(position).get(
"ispricereached");
String tag = v.getTag().toString();
String tagVec[] = tag.split(";");
long orderId = Long.parseLong(tagVec[0]);
String instStr = tagVec[1];
}
});
convertView.setTag(viewHolder);
}
private class ViewHolder {
TextView orderid;
RelativeLayout modeifyorder;
}
}
有不明白的可以相互交流
希望本文所述对大家Android程序设计有所帮助。