GridView点击事件无效的原因

一,今天遇到一个需求,先附图:

在这里用到gridview+adapter去实现,
1.点击添加,添加新的一天,如13天。
2.点击其他的天数,选中这一天并显示红色。
二,在写代码的过程中遇到两个问题:
1.点击添加的时候虽然实现自动添加天数,但比如13天的时,后面的天数依然也可以有点击事件,这个原
通过打log日志去观察,但也并不能理解,先附上错误的代码:

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder holder=null;
            final int pos=position;
            if (null==convertView) {
                holder=new ViewHolder();
                convertView=LayoutInflater.from(V2_Fragment_OverSea_RoundTrip.this.getActivity()).
                        inflate(R.layout.v2_item_createactivites_oversea_roundtrip_day, parent, false);

                holder.rb_stopDay=(RadioButton) convertView.findViewById(R.id.rb_stopDay);  
                convertView.setTag(holder);     
            }else{
                holder=(ViewHolder) convertView.getTag();
            }


            holder.rb_stopDay.setText((position+1)+"天");

            if (position==(dayData.size()-1)) {
                holder.rb_stopDay.setText("添加");
                /*holder.rb_stopDay.setTextColor(Color.parseColor("#FFFFFF"));
                holder.rb_stopDay.setBackgroundResource(R.drawable.v2_shape_circle03);*/
            }
            Log.i("TAG", "这里的新的值是多少="+position);
            if (position==mPosition) {
                holder.rb_stopDay.setChecked(true);
            }else{
                holder.rb_stopDay.setChecked(false);
            }

            return convertView;
        }

在点击的最后一个item的时候,position==数据集的最后一个时,有点击事件。但我虽然这样想的,点击比如13天,14天,依然可以有点击事件,而且能产生新的天数,不知道原因,请看过贴子的人求解。
2.于时我果断的采用了第二种方案,不在adapter里面写单个点击事件,用gridview的点击事件去产生新的天数。先附代码:

gv_dayOnDestination.setOnItemClickListener(new OnItemClickListener() {



            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                //Log.i("TAG", "有没有点击事件");
                //点击添加
                if (position<17 && position==(dayData.size()-1)) {
//                  Log.i("TAG", "position="+position);
                    nPosition=position;
                    dayData.add("");

                    myAdapter.notifyDataSetChanged();

                }
                if (position!=dayData.size()-1) {
                    mPosition=position;
                    myAdapter.notifyDataSetChanged();

                }

            }

        });

然后点击run运行,发现gridView点击无反应,我第一反应是好像以前碰到过这种类似的问题,我感觉像是事件分发的问题,做了下简单的分析 ,但记不起来了,于是我又换了gridView的onclick点击事件,依然没有反应,于是我只有百度了,百度上有很多问题的解释,是因为最底层的控件夺取了最后的点击监听事件,现在我不要最底层的控件获取点击事件,附上代码:
item的控件

              android:checked="false"
            android:clickable="false"
            android:focusable="false"
            android:focusableInTouchMode="false"

原理就是事件监听分发到gridview的时候就不往下分发,问题解决。
希望广大的程序员能参与到讨论,交流出真知,我一直这么认为。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值