在寫這篇博客之前被這個問題折騰了一兩天,怎麼都弄不好。一開始也看了幾篇ListView顯示錯亂的文章,在此把寫得比較好幾篇連接分享至此:http://blog.csdn.net/s003603u/article/details/47261393;http://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中圖片也會出現錯亂。
如果該博客對您有幫助的話,請點個贊評論一下哦,謝謝!