Android GridView使用View.GONE只隐藏内容而不隐藏空间的解决方案

最近在处理GridView的时候遇到这样一个问题:Android手机客户端接收服务端返回的一串数据(数据条数不固定),这串数据不一定都要显示到GridView上,也就是说有一部分内容需要隐藏掉,即有一部分Item需要隐藏。

最开始处理的时候使用的是View.GONE来隐藏整个Item,测试之后发现,内容是隐藏了,但是隐藏内容的这个item仍占用界面空间,这是不符合项目要求的,我们想要的效果是:如果有隐藏内容就隐藏掉,并且不占用界面空间,下一个item会自动向上填充!

 

最后想到的办法是动态的将Item整个隐藏并将width和height设置为0。测试了一个这样做果然能够实现羡慕需求。

 

设置代码如下:

@Override
    public View getView(int position, View convertView, ViewGroup arg2) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.test_layout, null);
        }
        /**
         * 状态为1、2时需要显示Item,其他情况不显示Item
         */
        int itemState = 0;
        switch(itemState){
            case 1:
                convertView.setVisibility(View.VISIBLE);
                break;
            case 2:
                convertView.setVisibility(View.VISIBLE);
                break;
                default://下面这段代码就是让GridView中的指定的item不显示并且不占用界面空间的方法
                    convertView.setVisibility(View.GONE);
                    AbsListView.LayoutParams param = new AbsListView.LayoutParams(
                            //设置item的weidth和height都为0
                            0,
                            0);
                    //将设置好的布局属性应用到GridView的Item上
                    convertView.setLayoutParams(param);
                    break;
        }
        return convertView;
    }

 

posted on 2014-01-10 11:31  飘杨......  阅读(7149)  评论(3编辑  收藏  举报