diff --git a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java index 5dd40ee..74998c8 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java @@ -7,6 +7,7 @@ import android.view.View; import android.widget.AdapterView; import android.widget.GridView; +import com.daimajia.swipe.SwipeAdapter; import com.daimajia.swipedemo.adapter.GridViewAdapter; public class GridViewExample extends Activity{ @@ -16,7 +17,9 @@ public class GridViewExample extends Activity{ super.onCreate(savedInstanceState); setContentView(R.layout.gridview); final GridView gridView = (GridView)findViewById(R.id.gridview); - gridView.setAdapter(new GridViewAdapter(this)); + GridViewAdapter adapter = new GridViewAdapter(this); + adapter.setMode(SwipeAdapter.Mode.Multiple); + gridView.setAdapter(adapter); gridView.setSelected(false); gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override diff --git a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java index 5dc8ddc..f5fd8ef 100644 --- a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java +++ b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java @@ -12,6 +12,7 @@ import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; +import com.daimajia.swipe.SwipeAdapter; import com.daimajia.swipedemo.adapter.ListViewAdapter; public class ListViewExample extends Activity { @@ -26,6 +27,7 @@ public class ListViewExample extends Activity { mListView = (ListView)findViewById(R.id.listview); mAdapter = new ListViewAdapter(this); mListView.setAdapter(mAdapter); + mAdapter.setMode(SwipeAdapter.Mode.Single); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { diff --git a/library/src/main/java/com/daimajia/swipe/SwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/SwipeAdapter.java index 0ca99d5..ae294f6 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeAdapter.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeAdapter.java @@ -9,7 +9,16 @@ import java.util.Set; public abstract class SwipeAdapter extends BaseAdapter { + public static enum Mode { + Single, Multiple + }; + + private Mode mode = Mode.Single; + + public final int INVALID_POSITION = -1; private Set mOpenPositions = new HashSet(); + private int mOpenPosition = INVALID_POSITION; + private SwipeLayout mPrevious; /** * return the {@link com.daimajia.swipe.SwipeLayout} resource id, int the view item. @@ -63,6 +72,25 @@ public abstract class SwipeAdapter extends BaseAdapter { return v; } + + /** + * set open mode + * @param mode + */ + public void setMode(Mode mode){ + if(mode == Mode.Multiple){ + mOpenPositions.clear(); + }else{ + mOpenPosition = INVALID_POSITION; + } + this.mode = mode; + notifyDataSetChanged(); + } + + public Mode getMode(){ + return mode; + } + class ValueBox { OnLayoutListener onLayoutListener; SwipeMemory swipeMemory; @@ -89,10 +117,18 @@ public abstract class SwipeAdapter extends BaseAdapter { @Override public void onLayout(SwipeLayout v) { - if(mOpenPositions.contains(position)) - v.open(false); - else{ - v.close(false); + if(mode == Mode.Multiple){ + if(mOpenPositions.contains(position)) + v.open(false); + else{ + v.close(false); + } + }else{ + if(mOpenPosition == position){ + v.open(false); + }else{ + v.close(false); + } } } } @@ -107,7 +143,15 @@ public abstract class SwipeAdapter extends BaseAdapter { @Override public void onClose(SwipeLayout layout) { - mOpenPositions.remove(position); + if(mode == Mode.Multiple) + mOpenPositions.remove(position); + else{ + if(position == mOpenPosition){ + mOpenPosition = INVALID_POSITION; + mPrevious = null; + } + + } } @@ -118,7 +162,16 @@ public abstract class SwipeAdapter extends BaseAdapter { @Override public void onOpen(SwipeLayout layout) { - mOpenPositions.add(position); + if(mode == Mode.Multiple) + mOpenPositions.add(position); + else{ + if(mOpenPosition != position){ + if(mPrevious != null) + mPrevious.close(); + } + mOpenPosition = position; + mPrevious = layout; + } } @Override @@ -131,4 +184,6 @@ public abstract class SwipeAdapter extends BaseAdapter { } } + + } diff --git a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java index 27ba09d..bfa4aec 100644 --- a/library/src/main/java/com/daimajia/swipe/SwipeLayout.java +++ b/library/src/main/java/com/daimajia/swipe/SwipeLayout.java @@ -529,6 +529,10 @@ public class SwipeLayout extends FrameLayout { } } + /** + * {@link android.view.View.OnLayoutChangeListener} added in API 11. + * I need to support it from API 8. + */ public interface OnLayout{ public void onLayout(SwipeLayout v); }