1. 程式人生 > >GridView中第一個item不顯示,以及顯示方式不正確的調整方式。

GridView中第一個item不顯示,以及顯示方式不正確的調整方式。

專案中在GridView的使用過程中遇到不少問題,在此記錄一下,給自己提個醒:

Gridview第一個item不顯示的問題。

在GridView中,我們在getView中可以對映每個item的佈局,通過inflate的方式。這裡參考一下大神的分析,具體在這裡有詳細的描述三種不同inflate方法的描述:

http://blog.csdn.net/lmj623565791/article/details/38171465。

在此建議使用第二種建構函式來構建inflate,至於為什麼,第一種inflate(layoutId, null )是無法獲取到佈局檔案的,那就無法通過getLayoutParams()和setLayoutParams()方法來進行單個item大小設定的。

有的朋友會問,可以用new GridViewLayoutParams()來操作,我對這個理解還不是很明白,但是我發現new出來的東西會出現莫名其妙的問題,所以個人自己建議是通過get和set方法來操作。

第一個item不顯示,主要是我們在getView中通過get和set方法進行了動態的item大小控制,那麼在這裡我們的控制程式碼應該怎麼放置呢?

@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		Log.i("CustomGridViewAdapter", "getView be called");
		ViewHold holder;
		if (convertView == null || convertView.getTag() == null) {
			convertView = mInflater.inflate(R.layout.image_text_button, parent,false);
			holder = new ViewHold();
			IniInflaterView(holder, convertView);
			
			convertView.setTag(holder);
		} else {
			holder = (ViewHold) convertView.getTag();
		}
		<pre name="code" class="html">int mwidth = mPullToRefreshGridView.getWidth() / 7;
		// Log.e("item寬度", mwidth + "");
		LayoutParams lp = (LayoutParams) convertView.getLayoutParams();
		lp.height = mwidth * 14 / 9;
		lp.width = mwidth;
		convertView.setLayoutParams(lp);

IniInflaterViewDoSomething(holder, arrayList.getBookInfo().get(position));return convertView;} 一般習慣性會把
int mwidth = mPullToRefreshGridView.getWidth() / 7;
		// Log.e("item寬度", mwidth + "");
		LayoutParams lp = (LayoutParams) convertView.getLayoutParams();
		lp.height = mwidth * 14 / 9;
		lp.width = mwidth;
		convertView.setLayoutParams(lp);
這幾行程式碼放到if裡面去操作,但是當構造完成是,已經存在了convertVIew的時候進的是else那就會影響到佈局顯示了。

參考幾位前輩寫的bolg:

http://blog.csdn.net/X_i_a_o_H_a_i/article/details/41822505