說一說ListView的那些坑

在寫這篇博客之前被這個問題折騰了一兩天,怎麼都弄不好。一開始也看了幾篇ListView顯示錯亂的文章,在此把寫得比較好幾篇連接分享至此:http://blog.csdn.net/s003603u/article/details/47261393http://blog.csdn.net/huanongjingchao/article/details/42918869。然後分享一下我的辛路歷程。

 

本篇文章是仿照iPhone實現編輯通話記錄。一開始我並沒有利用convertView來實現item中view重用,這樣就會導致滑動時大於getChildCount數目的item還保持原來的狀態,點擊編輯之後的具體效果如下(下圖是滑動後的效果):

那麼既然如此,那就利用convertView實現view重用就是了,我們再來看看利用convertView實現view重用的效果:

從上圖發現雖然解決了大於getChildCount數目的item狀態問題,但還是不是我所需要的效果,而且當不斷滑動ListView時,錯亂的位置不一樣。看了很多關於listview顯示錯亂的文章,也請教了公司同事,但都無功而返,甚是頭疼!當時也有想過通過按鈕點擊傳入一個參數給Adapter,但是就是沒有想到在Adapter中定義一個函數,然後在Fragment中調用Adapter這個函數傳入參數,偶然看到百度知道的一個回答,瞬間恍然大悟,按照這個思路問題果然解決。下面供上代碼及實現效果:

在Adapter中添加如下代碼:

 

public Boolean setFlag(Boolean flag){
	mflag=flag;
	return mflag;
}

在getView中作出判斷:

if(mflag){
	viewHolder.delRecord.setVisibility(View.GONE);
	viewHolder.mDetail.setVisibility(View.VISIBLE);
}else {
	viewHolder.delRecord.setVisibility(View.VISIBLE);
	viewHolder.mDetail.setVisibility(View.GONE);
}


在Fragment中相應按鈕點擊時調用:

callAdapter.setFlag(true);
callAdapter.notifyDataSetChanged();//不能少,設置完一定要更新


實現效果如下:

另,當ListView中有幾種不同的item時,一定記得重載getViewTypeCount()和getItemViewType()函數,不然當滑動時item中圖片也會出現錯亂。

 

如果該博客對您有幫助的話,請點個贊評論一下哦,謝謝!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章