关于ListView嵌套GridView中的onItemClickListener失效问题

一开始在ListView中设置了onItemClickListener,在里面Log输出Item列表的位置,完全没有反应,

网上大部分说的什么把子组件屏蔽掉(而且好多都是转载的一样的),

可是我希望的就是要用到子组件,所以这个方法治标不治本

能否同时即监听到子组件,又监听到ListView本身呢?(未找到解决办法)

所以只能找其他解决办法了...

开始以为是与onTouch这个方法有冲突,

参考了:http://blog.csdn.net/jiangwei0910410003/article/details/17504315

但是把onTouch事件注释掉后问题没有解决,猜想可能是GridView的onItemClickListener获取了焦点,导致

ListView的onItemClickListener无法获取焦点,从而导致点击事件无法识别

后来一想,我只是想在点击事件中获取ListView的Item的位置而已,在GridView的onItemClickListener获取到也是

可以的,所以自己应该可以重写一个OnItemClickListener接口不就ok了吗

参考:http://my.oschina.net/gluoyer/blog/182322

就重写了一个OnItemClickListener接口,然后问题得以解决 

 1 private class OnItemChildClickListener implements OnItemClickListener {
 2         // 点击类型索引,对应前面的CLICK_INDEX_xxx
 3         private int clickIndex;
 4         // 点击列表位置
 5         private int rowItem;
 6          
 7         public OnItemChildClickListener(int clickIndex, int position) {
 8             this.clickIndex = clickIndex;
 9             this.rowItem = position;
10         }
11      
12         /**
13          * 点击缩略图事件
14          */
15         @Override
16         public void onItemClick(AdapterView<?> parent, View view, int position, long id)
17         {
18             if (i) {
19                 imgGroup = new ArrayList<ImageInfo>();
20                 imgGroup = imageInfoMap.get(timeMap.get(rowItem));
21                 Log.e("ListViewAdapter2", Integer.toString(position));
22                 Log.i("ListItem position",Integer.toString(rowItem));
23                 String fileName = imgGroup.get(position).getPath();
24                 File file=new File(fileName);
25                 Intent it =new Intent(Intent.ACTION_VIEW);
26                 Uri mUri = Uri.parse("file://"+file.getPath());
27                 it.setDataAndType(mUri, "image/*");
28                 i = false;
29                 activity.startActivity(it);
30                 activity.finish();
31             } else {
32                 i = true;
33             }
34         }
35     }
36     //调用
37     gv = (MyGridView) convertView.findViewById(R.id.gridview1);
38     gv.setAdapter(new GridViewAdapter(context, position,timeMap,imageInfoMap));
39     gv.setOnItemClickListener(new OnItemChildClickListener(0, position));

  不知道还有没有其他什么好的解决ListView的按键监听被子组件覆盖的方法,有待研究~

原文地址:https://www.cnblogs.com/george-cw/p/3936930.html