zoukankan      html  css  js  c++  java
  • 关于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的按键监听被子组件覆盖的方法,有待研究~

  • 相关阅读:
    [转载]项目风险管理七种武器之引言
    [转载]基于TFS实践敏捷-Scrum模式运用
    [转载]基于TFS实践敏捷-工作项跟踪
    [转载]TFS入门指南
    SVN — subclipse操作指引
    Java 中 方法名或类名 变更 同时 更新 所有引用的 类名或方法名 的解决方案
    Java import javax.servlet 出错
    java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题
    vmware 传输(vmdb)错误-32:pipe:read failed 解决方法
    Web.xml配置详解
  • 原文地址:https://www.cnblogs.com/george-cw/p/3936930.html
Copyright © 2011-2022 走看看