GridView中第一個item不顯示,以及顯示方式不正確的調整方式。
阿新 • • 發佈:2019-01-31
專案中在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;} 一般習慣性會把
這幾行程式碼放到if裡面去操作,但是當構造完成是,已經存在了convertVIew的時候進的是else那就會影響到佈局顯示了。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);
參考幾位前輩寫的bolg:
http://blog.csdn.net/X_i_a_o_H_a_i/article/details/41822505