关闭

GridView的点击事件冲突解决

标签: android开发gridview事件冲突
5041人阅读 评论(2) 收藏 举报
分类:

      在开发的时候,经常可能遇到ListView或GridView控件点击事件与Item点击事件冲突的问题原因是Item布局中的button或ImageButton强制获取了item的焦点,解决方式之一是:只要设置Item布局中的button的focusable为false即可,另外可以在Item布局的根节点添加属性android:descendantFocusability="blocksDescendants"也可以解决。

    今天在开发一界面的时候遇到了点击事件冲突问题,并不是I控件本身与Item上的控件冲突,而是控件的本身与其header(比如ListView可以添加Header)中的事件冲突,用上面的方法就解决不了。先贴下界面情况,图是随便画的,请勿喷!


如上图,主要是头部的GridView与本身控件PullToRefreshGridViewWithHeaderAndFooter及其它部分控件的事件冲突,头部GridView的onItemClick()事件非常不灵敏,甚至无效,除非先点击其它部分,再点击GridView的item才有效。试了各种 方式都无效,后来就用了一个最原始的方法,就是把每一个Item的点击事件放在GridView的适配器adapter中来处理,冲突问题就没有了。

adapter中的主要代码 :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.product_category_list_item, null);
holder.categoryRela=(RelativeLayout) convertView.findViewById(R.id.index_category_rela);//是在item的根结点设置的id
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.categoryRela.setOnClickListener(new OnClickListener() {//这里设置的点击事件
@Override
public void onClick(View v) {
EventBus.getDefault().post(new CategoryItemEvent(pos));
}
});
return convertView;
}

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:744791次
    • 积分:10734
    • 等级:
    • 排名:第1672名
    • 原创:342篇
    • 转载:58篇
    • 译文:1篇
    • 评论:233条
    Github
    个人Github主页面:https://github.com/ldm520,请大家多指教!
    最新评论