diff --git a/EnhancedListView/src/main/java/de/timroes/android/listview/EnhancedListView.java b/EnhancedListView/src/main/java/de/timroes/android/listview/EnhancedListView.java index ca56d84..14b7e4a 100644 --- a/EnhancedListView/src/main/java/de/timroes/android/listview/EnhancedListView.java +++ b/EnhancedListView/src/main/java/de/timroes/android/listview/EnhancedListView.java @@ -279,7 +279,9 @@ public void onClick(View v) { // Dismiss dialog or change text if(mUndoActions.isEmpty()) { - mUndoPopup.dismiss(); + if(mUndoPopup.isShowing()) { + mUndoPopup.dismiss(); + } } else { changePopupText(); changeButtonLabel(); @@ -553,7 +555,9 @@ public void discardUndo() { undoable.discard(); } mUndoActions.clear(); - mUndoPopup.dismiss(); + if(mUndoPopup.isShowing()) { + mUndoPopup.dismiss(); + } } /** @@ -942,4 +946,18 @@ private boolean isSwipeDirectionValid(float deltaX) { } } + + @Override + protected void onWindowVisibilityChanged(int visibility) { + super.onWindowVisibilityChanged(visibility); + + /* + * If the container window no longer visiable, + * dismiss visible undo popup window so it won't leak, + * cos the container window will be destroyed before dismissing the popup window. + */ + if(visibility != View.VISIBLE) { + discardUndo(); + } + } }