Skip to content

Commit c9588c0

Browse files
committed
fix #3
1 parent 3ac67e0 commit c9588c0

File tree

4 files changed

+71
-7
lines changed

4 files changed

+71
-7
lines changed

demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.widget.AdapterView;
88
import android.widget.GridView;
99

10+
import com.daimajia.swipe.SwipeAdapter;
1011
import com.daimajia.swipedemo.adapter.GridViewAdapter;
1112

1213
public class GridViewExample extends Activity{
@@ -16,7 +17,9 @@ protected void onCreate(Bundle savedInstanceState) {
1617
super.onCreate(savedInstanceState);
1718
setContentView(R.layout.gridview);
1819
final GridView gridView = (GridView)findViewById(R.id.gridview);
19-
gridView.setAdapter(new GridViewAdapter(this));
20+
GridViewAdapter adapter = new GridViewAdapter(this);
21+
adapter.setMode(SwipeAdapter.Mode.Multiple);
22+
gridView.setAdapter(adapter);
2023
gridView.setSelected(false);
2124
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
2225
@Override

demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.widget.AdapterView;
1313
import android.widget.ListView;
1414

15+
import com.daimajia.swipe.SwipeAdapter;
1516
import com.daimajia.swipedemo.adapter.ListViewAdapter;
1617

1718
public class ListViewExample extends Activity {
@@ -26,6 +27,7 @@ protected void onCreate(Bundle savedInstanceState) {
2627
mListView = (ListView)findViewById(R.id.listview);
2728
mAdapter = new ListViewAdapter(this);
2829
mListView.setAdapter(mAdapter);
30+
mAdapter.setMode(SwipeAdapter.Mode.Single);
2931
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
3032
@Override
3133
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

library/src/main/java/com/daimajia/swipe/SwipeAdapter.java

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,16 @@
99

1010
public abstract class SwipeAdapter extends BaseAdapter {
1111

12+
public static enum Mode {
13+
Single, Multiple
14+
};
15+
16+
private Mode mode = Mode.Single;
17+
18+
public final int INVALID_POSITION = -1;
1219
private Set<Integer> mOpenPositions = new HashSet<Integer>();
20+
private int mOpenPosition = INVALID_POSITION;
21+
private SwipeLayout mPrevious;
1322

1423
/**
1524
* return the {@link com.daimajia.swipe.SwipeLayout} resource id, int the view item.
@@ -63,6 +72,25 @@ public final View getView(int position, View convertView, ViewGroup parent) {
6372
return v;
6473
}
6574

75+
76+
/**
77+
* set open mode
78+
* @param mode
79+
*/
80+
public void setMode(Mode mode){
81+
if(mode == Mode.Multiple){
82+
mOpenPositions.clear();
83+
}else{
84+
mOpenPosition = INVALID_POSITION;
85+
}
86+
this.mode = mode;
87+
notifyDataSetChanged();
88+
}
89+
90+
public Mode getMode(){
91+
return mode;
92+
}
93+
6694
class ValueBox {
6795
OnLayoutListener onLayoutListener;
6896
SwipeMemory swipeMemory;
@@ -89,10 +117,18 @@ public void setPosition(int position){
89117

90118
@Override
91119
public void onLayout(SwipeLayout v) {
92-
if(mOpenPositions.contains(position))
93-
v.open(false);
94-
else{
95-
v.close(false);
120+
if(mode == Mode.Multiple){
121+
if(mOpenPositions.contains(position))
122+
v.open(false);
123+
else{
124+
v.close(false);
125+
}
126+
}else{
127+
if(mOpenPosition == position){
128+
v.open(false);
129+
}else{
130+
v.close(false);
131+
}
96132
}
97133
}
98134
}
@@ -107,7 +143,15 @@ class SwipeMemory implements SwipeLayout.SwipeListener {
107143

108144
@Override
109145
public void onClose(SwipeLayout layout) {
110-
mOpenPositions.remove(position);
146+
if(mode == Mode.Multiple)
147+
mOpenPositions.remove(position);
148+
else{
149+
if(position == mOpenPosition){
150+
mOpenPosition = INVALID_POSITION;
151+
mPrevious = null;
152+
}
153+
154+
}
111155
}
112156

113157

@@ -118,7 +162,16 @@ public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset) {
118162

119163
@Override
120164
public void onOpen(SwipeLayout layout) {
121-
mOpenPositions.add(position);
165+
if(mode == Mode.Multiple)
166+
mOpenPositions.add(position);
167+
else{
168+
if(mOpenPosition != position){
169+
if(mPrevious != null)
170+
mPrevious.close();
171+
}
172+
mOpenPosition = position;
173+
mPrevious = layout;
174+
}
122175
}
123176

124177
@Override
@@ -131,4 +184,6 @@ public void setPosition(int position){
131184
}
132185
}
133186

187+
188+
134189
}

library/src/main/java/com/daimajia/swipe/SwipeLayout.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,10 @@ public void computeScroll() {
529529
}
530530
}
531531

532+
/**
533+
* {@link android.view.View.OnLayoutChangeListener} added in API 11.
534+
* I need to support it from API 8.
535+
*/
532536
public interface OnLayout{
533537
public void onLayout(SwipeLayout v);
534538
}

0 commit comments

Comments
 (0)