This commit is contained in:
daimajia 2014-08-26 21:39:05 +08:00
parent 3ac67e06c7
commit c9588c0ae7
4 changed files with 71 additions and 7 deletions

View File

@ -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

View File

@ -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) {

View File

@ -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<Integer> mOpenPositions = new HashSet<Integer>();
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 {
}
}
}

View File

@ -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);
}