我正在處理一個同時具有編輯和刪除按鈕的ListView,按下編輯將允許您編輯該對象,同時按下刪除將顯示一個對話框並確認它將刪除該對象並刷新列表。一切都正常工作,直到你刪除一個項目在另一個項目之前,然後在列表刷新後,當你嘗試編輯該項目時,它將把你帶到已刪除的項目。刪除Android ListView更新但仍然指向刪除對象?
例子:
項目1
項目2
我刪除項目1所以現在我的名單看起來是這樣的:
項目2
我編輯項目2,它反而顯示項目1的細節。
從我ListAdapter:
private void mDeleteLineItem(final int position)
{
final LineItem lineItem = mItems.get(position);
FragmentManager fm = ((Activity)mContext).getFragmentManager();
DeleteConfirmationDialogFragment deleteConfirmationDialogFragment = DeleteConfirmationDialogFragment.newInstance
(
mContext.getString(R.string.delete_line_item), mContext.getString(R.string.delete_line_item_confirmation_message),
new DeleteConfirmationDialogListener() {
@Override
public void onConfirmDeleteButtonPressed() {
Log.d("LOG", "List Count Before Delete: " + mItems.size());
for(LineItem item : mItems)
{
Log.d("LOG", "Item Name: " + item.GetItem().GetPartNumber());
}
lineItem.delete();
mItems.remove(position);
Log.d("LOG", "List Count After Delete: " + mItems.size());
for(LineItem item : mItems)
{
Log.d("LOG", "Item Name: " + item.GetItem().GetPartNumber());
}
mListener.onDataSetChanged();
((MainActivity)mContext).UpdateShoppingCartBubble();
((MainActivity)mContext).UpdatePurchaseOrderQueueBubble();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
}
);
deleteConfirmationDialogFragment.show(fm, "fragment_delete_confirmation");
}
從我的片段(這是正在創建的列表在哪裏,我有一個聽衆,讓我更新時,該項目已被刪除列表)
lineItemListAdapter.SetArrayAdapterListener(new ArrayAdapterListener()
{
@Override
public void onDataSetChanged()
{
lineItemListAdapter.notifyDataSetChanged();
if(shoppingCartList.isEmpty())
{
mDisplayEmptyShoppingCart();
}
}
});
你可能還注意到我有一些日誌被扔進刪除。在這個例子中,我刪除M1P1,這是我得到的那些:
05-07 08:25:11.740 List Count Before Delete: 2
05-07 08:25:11.743 Item Name: M1P1
05-07 08:25:11.743 Item Name: C1P7
05-07 08:25:11.826 List Count After Delete: 1
05-07 08:25:11.827 Item Name: C1P7
,可能是有用的其他信息,我使用ActiveAndroid的ORM,你會看到,我刪除項目之前,我實際上從列表中刪除它,使我更加困惑,爲什麼它仍然加載對象,就好像它仍然存在。
任何想法可能會造成這種情況?我將繼續研究這個問題,看看我能否弄清楚發生了什麼事情,但是我想我會在這裏發一個帖子,然後再把我的頭靠在我的桌子上。