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種有時會出現數組越界導致系統奔潰,第三種比較土,不過可用;