diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java index d8ee9bde..2168dc36 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java @@ -16,6 +16,7 @@ import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewParent; +import android.view.ViewTreeObserver; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.FrameLayout; @@ -39,6 +40,7 @@ public class SwipeLayout extends FrameLayout { private int mTouchSlop; + private Status mCurrentStatus = Status.Close; private DragEdge mCurrentDragEdge = DefaultDragEdge; private ViewDragHelper mDragHelper; @@ -108,6 +110,16 @@ public SwipeLayout(Context context, AttributeSet attrs, int defStyle) { mShowMode = ShowMode.values()[ordinal]; a.recycle(); + // restore state + getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + if (mCurrentStatus.equals(Status.Open) && getOpenStatus().equals(Status.Close)) + open(false, getDragEdge()); + else if (mCurrentStatus.equals(Status.Close) && getOpenStatus().equals(Status.Open)) + close(false); + } + }); } public interface SwipeListener { @@ -1331,6 +1343,7 @@ public void open(boolean smooth, boolean notify) { safeBottomView(); } } + mCurrentStatus = Status.Open; invalidate(); } @@ -1386,6 +1399,7 @@ public void close(boolean smooth, boolean notify) { safeBottomView(); } } + mCurrentStatus = Status.Close; invalidate(); }