Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@ public class SwipeMenuAdapter implements WrapperListAdapter,
private ListAdapter mAdapter;
private Context mContext;
private SwipeMenuListView.OnMenuItemClickListener onMenuItemClickListener;
private int mPosition = -1;

public SwipeMenuAdapter(Context context, ListAdapter adapter) {
public SwipeMenuAdapter(Context context, ListAdapter adapter, int menuPosition) {
mAdapter = adapter;
mContext = context;
mPosition = menuPosition;
}

@Override
Expand All @@ -46,8 +48,14 @@ public long getItemId(int position) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SwipeMenuLayout layout = null;
ViewGroup viewGroup = null;
if (convertView == null) {
View contentView = mAdapter.getView(position, convertView, parent);
viewGroup = (ViewGroup) contentView;
if (mPosition >= 0 && mPosition < viewGroup.getChildCount()) {
contentView = viewGroup.getChildAt(mPosition);
viewGroup.removeView(contentView);
}
SwipeMenu menu = new SwipeMenu(mContext);
menu.setViewType(getItemViewType(position));
createMenu(menu);
Expand All @@ -59,18 +67,38 @@ public View getView(int position, View convertView, ViewGroup parent) {
listView.getCloseInterpolator(),
listView.getOpenInterpolator());
layout.setPosition(position);
if (mPosition >= 0) {
viewGroup.addView(layout);
} else {
viewGroup = layout;
}
} else {
layout = (SwipeMenuLayout) convertView;
layout.closeMenu();
layout.setPosition(position);
View view = mAdapter.getView(position, layout.getContentView(),
parent);
viewGroup = (ViewGroup) convertView;
if (convertView instanceof SwipeMenuLayout) {
layout = (SwipeMenuLayout)convertView;
} else {
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View view = viewGroup.getChildAt(i);
if (view instanceof SwipeMenuLayout) {
layout = (SwipeMenuLayout)view;
break;
}
}
}
if (layout != null) {
layout.closeMenu();
layout.setPosition(position);
mAdapter.getView(position, layout.getContentView(), parent);
} else {
// must ensure invoke mAdapter.getView()
mAdapter.getView(position, convertView, parent);
}
}
if (mAdapter instanceof BaseSwipListAdapter) {
boolean swipEnable = (((BaseSwipListAdapter) mAdapter).getSwipEnableByPosition(position));
layout.setSwipEnable(swipEnable);
}
return layout;
return viewGroup;
}

public void createMenu(SwipeMenu menu) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Interpolator;
import android.widget.ListAdapter;
import android.widget.ListView;
Expand Down Expand Up @@ -39,6 +40,8 @@ public class SwipeMenuListView extends ListView {
private Interpolator mCloseInterpolator;
private Interpolator mOpenInterpolator;

private int mPosition = -1;

public SwipeMenuListView(Context context) {
super(context);
init();
Expand All @@ -60,9 +63,13 @@ private void init() {
mTouchState = TOUCH_STATE_NONE;
}

public void setMenuPosition(int position) {
mPosition = position;
}

@Override
public void setAdapter(ListAdapter adapter) {
super.setAdapter(new SwipeMenuAdapter(getContext(), adapter) {
super.setAdapter(new SwipeMenuAdapter(getContext(), adapter, mPosition) {
@Override
public void createMenu(SwipeMenu menu) {
if (mMenuCreator != null) {
Expand Down Expand Up @@ -114,7 +121,17 @@ public boolean onInterceptTouchEvent(MotionEvent ev) {
mTouchPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
View view = getChildAt(mTouchPosition - getFirstVisiblePosition());

//只在空的时候赋值 以免每次触摸都赋值,会有多个open状态
if (!(view instanceof SwipeMenuLayout)) {
// find child for SwipeMenuLayout
ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
view = viewGroup.getChildAt(i);
if (view instanceof SwipeMenuLayout) {
break;
}
}
}
// 只在空的时候赋值 以免每次触摸都赋值,会有多个open状态
if (view instanceof SwipeMenuLayout) {
//如果有打开了 就拦截.
if (mTouchView != null && mTouchView.isOpen() && !inRangeOfView(mTouchView.getMenuView(), ev)) {
Expand Down