ListView中移除某個item的Remove()方法的應用

android開發中我們經常會遇到listView列表中刪除某一條item的需求,下面是我總結的幾種實現方法:

1.第一種是從listView的最大長度開始依次遞減的for循環,當遇到滿足條件的item後直接調用  mOldRelation.remove(position);的方法將其移除;

 

private List<TNPFriendTagRelation > mOldRelation=new ArrayList<>();
    ....... ...........
 for(int j=mOldRelation.size()-1;j>=0;j--)
                {
                    TNPFriendTagRelation info = mOldRelation.get(j);
                    if (info != null && info.getFriendTagId() != "123") {
                                mOldRelation.remove(j);
                        }
                }

有些不熟悉的人可能會寫成這樣:for(int j=0;j<mOldRelation.size()-1;j++);那麼最終就會出現一種情況,那就是數組越界;

比如列表的長度爲5,你第一次remove(1),那麼現在列表的長度只剩下了4,當你再次執行remove(4)時,就會報錯,你會覺得我的列表長度不是5嗎,那你就錯了,在你執行完第一次remove(1)時列表長度已經爲4了,也就是說現在最大的位置只能執行remove(3),你執行了執行remove(4)所有就越界了;

2、第二種實現方法就是用遊標Iterator ;

這種方法先是獲取Iterator it = mOldRelation.iterator();的it對象,再直接用while (it.hasNext())去循環,遇到需要移除的直接調用 it.remove();

 Iterator it = mOldRelation.iterator();
                while (it.hasNext()) {
                    TNPFriendTagRelation info = (TNPFriendTagRelation) it.next();
                    if (info != null && info.getFriendTagId() != “123”) {
                                  it.remove();
                        }
                    }

3、還有最後一種最土的方法,那就是直接在弄一個新的列表,把需要移除的item忽略掉,把其他正常的item裝進新的列表即可,代碼就不寫出來了;

總結上面三種方法,最穩定和快速的是第一種,第2種有時會出現數組越界導致系統奔潰,第三種比較土,不過可用;

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