2 q649916440 q649916440 于 2014.08.08 09:52 提问

Android开发listView中的Button点击事件被拦截

根据http://blog.csdn.net/boylinux/article/details/8860443 这位大神的帖子,我的代码如下,现在的问题是Listview中的Button和imageview和textview控件点击之后不会响应,而在滑动一下Listview后,之前的点击事件才会响应,导致这个问题的原因不明,但是如果不用HashMap这个MAP的话,就不会有这个问题,请问大神们这是为什么呢?代码如下:
public class MyTwoAdapter extends BaseAdapter {
Context context;
private List data;
FollowInfo followInfo;
Bitmap bitmap;
FinalBitmap finalBitmap;
HashMap lmap = new HashMap();
private LayoutInflater mInflater=null;

public void setData(List<FollowInfo> data) {
    this.data = data;
}

public MyTwoAdapter(Context context) {
    this.context = context;
    mInflater = LayoutInflater.from(context);
    finalBitmap = FinalBitmap.create(context);//初始化FinalBitmap模块
    finalBitmap.configLoadingImage(R.drawable.ic_launcher);
}

@Override
public int getCount() {
    return data.size();
}

@Override
public FollowInfo getItem(int position) {
    return data.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@SuppressLint("NewApi") @Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = null;
    if (lmap.get(position)==null) {

// if (convertView == null) {
convertView = mInflater.inflate(R.layout.mytwo_item, null);
viewHolder = new ViewHolder();
viewHolder.user_logo = (ImageView) convertView.findViewById(R.id.user_logo);
viewHolder.user_name = (TextView) convertView.findViewById(R.id.user_name);
viewHolder.add_time = (TextView) convertView.findViewById(R.id.add_time);
viewHolder.iv = (ImageView) convertView.findViewById(R.id.iv);
viewHolder.sign1 = (TextView) convertView.findViewById(R.id.sign1);
viewHolder.sign2 = (TextView) convertView.findViewById(R.id.sign2);
viewHolder.sign3 = (TextView) convertView.findViewById(R.id.sign3);
viewHolder.up = (Button) convertView.findViewById(R.id.yes_up);
viewHolder.no_up = (Button) convertView.findViewById(R.id.no_up);
viewHolder.up_num = (TextView) convertView.findViewById(R.id.up_num);
viewHolder.say_sth = (ImageButton) convertView.findViewById(R.id.say_sth);
viewHolder.share = (ImageButton) convertView.findViewById(R.id.share);

viewHolder.fl = (FrameLayout) convertView.findViewById(R.id.fl);
viewHolder.describe = (TextView) convertView.findViewById(R.id.describe);
viewHolder.iv.setOnClickListener(clickListener);
lmap.put(position, convertView);

convertView.setTag(viewHolder);

        followInfo = data.get(position);
        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) viewHolder.fl.getLayoutParams();
        layoutParams.width = AndroidUtil.SCREEN_WIDTH; //图片宽度填满屏幕
        layoutParams.height = (int) (AndroidUtil.SCREEN_WIDTH * 1.5);
        viewHolder.fl.setLayoutParams(layoutParams);
        viewHolder.user_logo.setImageResource(R.drawable.ic_launcher);
        viewHolder.iv.setImageResource(R.drawable.ic_launcher);
        viewHolder.user_name.setText(followInfo.getUser_name());
        viewHolder.up_num.setText(followInfo.getHot() + "");
        viewHolder.add_time.setText(UpdateTime.getUpdateDate(new Date().getTime(), followInfo.getUpload_date(), context));
        if (!followInfo.getDescribe().equals("")){
            viewHolder.describe.setVisibility(0);
            viewHolder.describe.setText(followInfo.getDescribe());              
        }
        if (followInfo.getLikeStatus() == 1){
            viewHolder.up.setVisibility(View.VISIBLE);
            viewHolder.no_up.setVisibility(View.INVISIBLE);
        } else {
            viewHolder.up.setVisibility(View.INVISIBLE);
            viewHolder.no_up.setVisibility(View.VISIBLE);
        }
        if (!followInfo.getCountry3().equals("")){
            viewHolder.sign1.setVisibility(View.VISIBLE);
            viewHolder.sign1.setText("#" + followInfo.getCountry3() + " ");
        }
        if (!followInfo.getFashion().equals("")){
                viewHolder.sign2.setVisibility(View.VISIBLE);
                viewHolder.sign2.setText("#" + followInfo.getFashion() + " ");
        }
        if (!followInfo.getScene().equals("")){
                viewHolder.sign3.setVisibility(View.VISIBLE);
                viewHolder.sign3.setText("#" + followInfo.getScene() + " ");
        }

        //图片设置
        final String user_image = followInfo.getImage_id();

        finalBitmap.display(viewHolder.iv,AndroidUtil.SERVER_PATH+  //finalBitmap加载图片
                "imageLoad/load_image_buff/"+ user_image +"/00/0");

         //头像设置图片   
        final String user_logoUrl = followInfo.getUser_id();
        finalBitmap.display(viewHolder.user_logo,AndroidUtil.SERVER_PATH    
                +"imageLoad/load_user_image_buff/" + user_logoUrl);

        if (followInfo.getTags() != null && followInfo.getTags().size() != 0){ //动态添加标签                             
            for (int i = 0; i <  followInfo.getTags().size(); i++){ //TAG数
                float tranX;
                float tranY;
                View tag_layout;

                final Tags tag = followInfo.getTags().get(i); 

                if (tag.getPercentX() == null || tag.getPercentX().equals("") || tag.getPercentX().equals("null")){
                    tranX = Float.parseFloat(tag.getTagX()) / 480 * layoutParams.width;
                    tranY = Float.parseFloat(tag.getTagY()) / 720 * layoutParams.height - AndroidUtil.dip2px(context, 8);
                } else {
                    tranX = Float.parseFloat(tag.getPercentX()) * layoutParams.width;
                    tranY = Float.parseFloat(tag.getPercentY()) * layoutParams.height - AndroidUtil.dip2px(context, 8);
                }

// Log.e("tranX", tranX + "");
// Log.e("tranY", tranY + "");
//链接图片是否占空间
int brandURLLength = 0;
boolean isBrandUrl = false;
if (tag.getBrandURL() != null && !tag.getBrandURL().equals("") && !tag.getBrandURL().equals("null")){
isBrandUrl = true;
brandURLLength = AndroidUtil.dip2px(context, 25);
}
//圆点及箭头及文字空白区域的长度和
int pointArrowLength = AndroidUtil.dip2px(context, 35);
//文字的长度
int textLength = AndroidUtil.getLineLength(tag.getBrand(), 28);
// Log.e("position", position + "");
TextView tag_text;
ImageView tag_brand;
// 判断左边显示还是右边显示
if (layoutParams.width - tranX >= brandURLLength + pointArrowLength + textLength){ //右边显示
tag_layout = LayoutInflater.from(context).inflate(R.layout.right_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationX(tranX);
tag_layout.setTranslationY(tranY);
} else if (tranX < brandURLLength + pointArrowLength + textLength){ //显示不全
if (tranX * 2 < layoutParams.width){ //右边显示.但显示不全

tag_layout = LayoutInflater.from(context).inflate(R.layout.right_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_text.setWidth((int)(layoutParams.width
- tranX - brandURLLength - pointArrowLength + AndroidUtil.dip2px(context, 10)));
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationX(tranX);
tag_layout.setTranslationY(tranY);
} else { //左边显示 不全
tag_layout = LayoutInflater.from(context).inflate(R.layout.left_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_text.setWidth((int)(tranX - brandURLLength - AndroidUtil.dip2px(context, 15)));
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationY(tranY);
}
} else { //左边显示
tag_layout = LayoutInflater.from(context).inflate(R.layout.left_tag, null);
tag_text = (TextView) tag_layout.findViewById(R.id.tag_text);
tag_brand = (ImageView) tag_layout.findViewById(R.id.tag_brand);
tag_layout.setTranslationX(tranX - AndroidUtil.dip2px(context, 25) - textLength - brandURLLength);
tag_layout.setTranslationY(tranY);
}
tag_text.setText(tag.getBrand());
if (isBrandUrl){
tag_brand.setVisibility(View.VISIBLE);

}
viewHolder.fl.addView(tag_layout);

                tag_text.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        Intent intent = new Intent(context, SearchResultActivity.class);
                        ArrayList<String> list = new ArrayList<String>();
                        list.add(tag.getBrand());
                        intent.putExtra("sign_cont", list);
                        intent.putExtra("from_flag", "&brand=");
                        context.startActivity(intent);
                    }
                });
                tag_brand.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {                                               
                        if (tag.getBrandURL() != null && !tag.getBrandURL().equals("")){
                            Uri uri = Uri.parse(tag.getBrandURL());
                            Intent intent = new Intent();
                            intent.setData(uri);
                            intent.setAction(Intent.ACTION_VIEW);
                            try{
                                context.startActivity(intent);                                  
                            } catch (Exception e){
                                Toast toast = Toast.makeText(context,
                                        context.getResources().getString(R.string.err_uri), Toast.LENGTH_SHORT);
                                toast.setGravity(Gravity.CENTER, 0, 300);                               
                                toast.show();
                            }                           
                        }
                    }
                });
            }
        }
        addListener(convertView, followInfo, followInfo.getImage_id(), position);
    }
    else {
        convertView = lmap.get(position);  
        viewHolder = (ViewHolder) convertView.getTag();
    }
    return convertView;
}

public class ViewHolder{
    ImageView user_logo;
    TextView user_name;
    TextView add_time;
    ImageView iv;
    TextView sign1;
    TextView sign2;
    TextView sign3;
    Button up;
    Button no_up;
    TextView up_num;
    ImageButton say_sth;
    ImageButton share;
    FrameLayout fl;
    TextView describe;
}
public void addListener(final View convertView,final FollowInfo followInfo,
        final String image_uri, final int position) {      
    final Button no_up = (Button) convertView.findViewById(R.id.no_up);
    final Button yes_up = (Button) convertView.findViewById(R.id.yes_up);
    final TextView up_num = (TextView) convertView.findViewById(R.id.up_num);
    final ImageButton share = (ImageButton) convertView.findViewById(R.id.share);
    final TextView sign1 = (TextView) convertView.findViewById(R.id.sign1);
    final TextView sign2 = (TextView) convertView.findViewById(R.id.sign2);
    final TextView sign3 = (TextView) convertView.findViewById(R.id.sign3);
    final ImageButton say_sth = (ImageButton) convertView.findViewById(R.id.say_sth);
    final ImageView user_logo = (ImageView) convertView.findViewById(R.id.user_logo);
    final TextView user_name = (TextView) convertView.findViewById(R.id.user_name);
    no_up.setOnClickListener(new OnClickListener() {            
        public void onClick(View v) {
            no_up.setVisibility(View.INVISIBLE);
            yes_up.setVisibility(View.VISIBLE);
            up_num.setText(Integer.parseInt(up_num.getText().toString()) + 1 + "");
            new AsyncUpLoad(followInfo.getImage_id(), followInfo.getUser_id());
        }
    }); 
    yes_up.setOnClickListener(new OnClickListener() {           
        public void onClick(View v) {
            no_up.setVisibility(View.VISIBLE);
            yes_up.setVisibility(View.INVISIBLE);
            up_num.setText(Integer.parseInt(up_num.getText().toString()) - 1 + "");
            new AsyncUpLoad(followInfo.getImage_id(), followInfo.getUser_id());
        }
    }); 

}

Csdn user default icon
上传中...
上传图片
插入图片