最近在处理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; }