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