完美解决ListView内部嵌套GridView导致各种异常,无法点击的问题

业务场景就是ListView里面每个item 分别嵌套了一个GridView。。。说起来很简单。。这里面坑很多。。

遇到的问题可能有:1、gridview显示不全。无法占满。2、listView点击item点击事件无效 3、GridView点击事件无效。4、假如GridView每行显示3个。但是某一行只有2张图片,那么第三张图片所在的空白区域点击事件无法触发 listView的Item 的点击事件。也就是说。这部分空白区域点击事件丢失了?

网上的解决办法千奇百怪。。很少有几个真正解决了这个问题。所以当我解决的时候分享给大家。主要解决办法是:通过代码关闭Gridview的焦点占有事件。通过给Listview和GridView的每个Item设置点击事件来处理。

@Override@Nullable
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder v = null;
    Map, Object> detailMap = list.get(position);
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(
                R.layout.item_mylist, null);
        v = new ViewHolder(convertView);
        convertView.setTag(v);
    }else{
        v=(ViewHolder) convertView.getTag();
    }
  /*  在item里面给Item设置点击事件。注意。不能直接使用convertView。所以layout里面又嵌套了一层布局,加个id来辨识*/
    v.item.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context,"您点击的listView的下标是"+position+"",Toast.LENGTH_SHORT).show();
        }
    });
    /*绑定了item里面的gridview*/
    Listdatalist=(List)MapUtils.getObject(detailMap,"pic",new ArrayList<>());
    /*使用自定义的gridview主要是解决Gridview嵌套在ListView里面显示不全。显示异常的问题*/
     MygridviewAdapter mygridviewAdapter=new MygridviewAdapter(context, datalist,position);
   /* 此处为屏蔽gridView点击事件。主要是解决gridview不能铺满横向屏幕,导致导致空白区域点击无效的解决办法(比如每行最多显示3个图片,但是当前只有2张图片。第三个空白区域点击事件异常)*/
    v.mygridview.setClickable(false);// 屏蔽主动获得点击
    v.mygridview.setPressed(false);
    v.mygridview.setEnabled(false);
    v.mygridview.setAdapter(mygridviewAdapter);
    v.tv.setText(MapUtils.getString(detailMap,"name",""));
    v.tv.setTag(position);
    return convertView;
}

这是部分关键性代码。基本你研究过。可以解决你的点击事件的问题。如果还行。可以下载我的demo


DEMO下载地址:http://download.csdn.net/detail/a872822645/9838932

点击打开链接





你可能感兴趣的:(完美解决ListView内部嵌套GridView导致各种异常,无法点击的问题)