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

问题描述

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());
        }
    });

}

时间: 2024-10-22 13:22:18

button点击事件-Android开发listView中的Button点击事件被拦截的相关文章

微博-android,Listview中item点击变色冲突

问题描述 android,Listview中item点击变色冲突 我想要像微博一样,当点击评论.转发.赞3个按钮的时候,只有按钮变色. 点击其他地方时,整个item都变色. 然后我为最外层的布局和"评论.点赞.转发"3个按钮的布局都设置了selector,但结果是无论点击item的哪个地方,都是整个布局都变色.怎么修改都不行,不知是哪里出了问题 <selector xmlns:android="http://schemas.android.com/apk/res/and

android开发 如何实现 监听点击屏幕任意位置事件

问题描述 android开发 如何实现 监听点击屏幕任意位置事件 好比一个导航页,当滑倒最后一页时,提示用户点击屏幕的任意位置进入MainActivity.这种点击事件如何响应? 解决方案 原来是这样的啊啊,这下我知道啦 解决方案二: 最简单的就是,在视图最上面加个控件(全屏显示),背景设置为透明,先设置为gone,滑动到最后页面,显示出来就可以了,然后给这个控件加个事件--

listview-android-怎么在一个ListView中监听点击事件?

问题描述 android-怎么在一个ListView中监听点击事件? 我现在有这个代码 ListView list = (ListView)findViewById(R.id.ListView01); ... list.setAdapter(adapter); 当我像下边这么做的时候 list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(Adapte

Listview中找到button

问题描述 Listview中找到button listview里每个item添加一个button 如何找到这个button并添加点击事件 解决方案 如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的

Android开发ListView中下拉刷新上拉加载及带列的横向滚动实现方法_Android

ListView 控件可使用四种不同视图显示项目.通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本. 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 View 属性决定在列表中控件使用何种视图显示项目. 还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示.另外,还可管理列表中项目的排序方法和选定项目的外观. 相信有很人做的项目估计都用的到这个.就是List

移动开发-Android开发listview问题

问题描述 Android开发listview问题 我是一个Android开发新手,我现在想做一个记事本样子的应用,我现在只能做到继承baseadapter,然后定义20行textview,点击每一行都跳转到同一个页面,如果我想搞一个按钮,开始情况没有listview为空,点击一下按钮,增加一行textvtiew,并且增加一个对应的书写的界面.点击这个新增的一行,就跳转到新增的书写界面,我应该怎样做,最好用代码表示,谢谢. 解决方案 用 List 来保持数据,当点击按钮时 list.add(tex

android开发 listview的item点击后显示详细信息

问题描述 android开发 listview的item点击后显示详细信息 item 的textview点击后我把maxlines的限制去除,数据是能完整显示了,但是由于item本身的高度限制,导致textview无法正常显示,请问怎么解决 解决方案 点击ListView,显示其详细信息android listView点击item,高亮显示Android ListView点击item 显示隐匿菜单项 解决方案二: 在item的layout文件中,给item设定minHeight,即可 解决方案三

安卓-Android开发ListView嵌套GridView,如何更加优化

问题描述 Android开发ListView嵌套GridView,如何更加优化 我在ListView中嵌套GridView,效果实现了,但我在ListView的getView()中是 new GridViewAdapter(``````),也就是说我每一个大的ListView的Item都有去new 一个GridView的适配器,这样对内存不好.可我想通过notifyDataSetChanged()来 改变嵌套的GridView中的数据,一直实现不了...求高手解答··· 解决方案 用viewho

uc浏览器-Android 在listview中实现视频播放和全屏

问题描述 Android 在listview中实现视频播放和全屏 比如 新的UC浏览器中的视频 网易新闻的视听 效果,这是我能拿出的最大的悬赏 请大神赐教 解决方案 http://download.csdn.net/detail/u012440207/7978157 你可以再做一个activity,传值,在新的activity播放http://jingyan.baidu.com/article/86fae346c8b0013c49121a2a.html 解决方案二: 一般listview展示的都