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