Handle the itemClick and the itemLongClick only when the SwipeLayout is the root of AdapterView's item,

This commit is contained in:
linfaxin 2015-03-16 10:33:18 +08:00
parent 742494d085
commit 8e89db06b0
1 changed files with 26 additions and 35 deletions

View File

@ -928,11 +928,8 @@ public class SwipeLayout extends FrameLayout {
private AdapterView getAdapterView() {
ViewParent t = getParent();
while (t != null) {
if (t instanceof AdapterView) {
return (AdapterView) t;
}
t = t.getParent();
if (t instanceof AdapterView) {
return (AdapterView) t;
}
return null;
}
@ -940,46 +937,40 @@ public class SwipeLayout extends FrameLayout {
private void performAdapterViewItemClick() {
if(getOpenStatus()!= Status.Close) return;
ViewParent t = getParent();
while (t != null) {
if (t instanceof AdapterView) {
AdapterView view = (AdapterView) t;
int p = view.getPositionForView(SwipeLayout.this);
if (p != AdapterView.INVALID_POSITION
&& view.performItemClick(view.getChildAt(p - view.getFirstVisiblePosition()), p, view
.getAdapter().getItemId(p))) return;
if (t instanceof AdapterView) {
AdapterView view = (AdapterView) t;
int p = view.getPositionForView(SwipeLayout.this);
if (p != AdapterView.INVALID_POSITION){
view.performItemClick(view.getChildAt(p - view.getFirstVisiblePosition()), p, view
.getAdapter().getItemId(p));
}
t = t.getParent();
}
}
private boolean performAdapterViewItemLongClick() {
if(getOpenStatus()!= Status.Close) return false;
ViewParent t = getParent();
while (t != null) {
if (t instanceof AdapterView) {
if (t instanceof AdapterView) {
AdapterView view = (AdapterView) t;
int p = view.getPositionForView(SwipeLayout.this);
if (p == AdapterView.INVALID_POSITION) return false;
long vId = view.getItemIdAtPosition(p);
boolean handled = false;
try {
Method m = AbsListView.class.getDeclaredMethod("performLongPress", View.class, int.class, long.class);
m.setAccessible(true);
handled = (boolean) m.invoke(view, SwipeLayout.this, p, vId);
AdapterView view = (AdapterView) t;
int p = view.getPositionForView(SwipeLayout.this);
if (p == AdapterView.INVALID_POSITION) return false;
long vId = view.getItemIdAtPosition(p);
boolean handled = false;
try {
Method m = AbsListView.class.getDeclaredMethod("performLongPress", View.class, int.class, long.class);
m.setAccessible(true);
handled = (boolean) m.invoke(view, SwipeLayout.this, p, vId);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
if (view.getOnItemLongClickListener() != null) {
handled = view.getOnItemLongClickListener().onItemLongClick(view, SwipeLayout.this, p, vId);
}
if (handled) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
}
if (view.getOnItemLongClickListener() != null) {
handled = view.getOnItemLongClickListener().onItemLongClick(view, SwipeLayout.this, p, vId);
}
if (handled) {
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
}
return handled;
}
t = t.getParent();
return handled;
}
return false;
}