我正在处理一个同时具有编辑和删除按钮的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,你会看到,我删除项目之前,我实际上从列表中删除它,使我更加困惑,为什么它仍然加载对象,就好像它仍然存在。
任何想法可能会造成这种情况?我将继续研究这个问题,看看我能否弄清楚发生了什么事情,但是我想我会在这里发一个帖子,然后再把我的头靠在我的桌子上。