Skip to content

Commit 34e2389

Browse files
committed
fix #19
1 parent f2cec54 commit 34e2389

File tree

1 file changed

+51
-2
lines changed

1 file changed

+51
-2
lines changed

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

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111
import android.view.View;
1212
import android.view.ViewGroup;
1313
import android.view.ViewParent;
14+
import android.widget.Adapter;
1415
import android.widget.AdapterView;
16+
import android.widget.BaseAdapter;
1517
import android.widget.FrameLayout;
18+
import android.widget.HeaderViewListAdapter;
19+
import android.widget.ListAdapter;
1620

1721
import java.util.ArrayList;
1822
import java.util.HashMap;
@@ -713,8 +717,12 @@ private boolean childNeedHandleTouchEvent(View v, MotionEvent event){
713717
@Override
714718
public boolean onTouchEvent(MotionEvent event) {
715719

720+
if(!isEnabledInAdapterView())
721+
return true;
722+
716723
int action = event.getActionMasked();
717724
ViewParent parent = getParent();
725+
718726
gestureDetector.onTouchEvent(event);
719727
Status status = getOpenStatus();
720728
ViewGroup touching = null;
@@ -818,6 +826,46 @@ public boolean onTouchEvent(MotionEvent event) {
818826
return true;
819827
}
820828

829+
/**
830+
* if working in {@link android.widget.AdapterView}, we should response {@link android.widget.Adapter}
831+
* isEnable(int position).
832+
* @return true when item is enabled, else disabled.
833+
*/
834+
private boolean isEnabledInAdapterView(){
835+
AdapterView adapterView = getAdapterView();
836+
boolean enable = true;
837+
if(adapterView != null){
838+
Adapter adapter = adapterView.getAdapter();
839+
if(adapter != null){
840+
int p = adapterView.getPositionForView(SwipeLayout.this);
841+
if(adapter instanceof BaseAdapter){
842+
enable &= ((BaseAdapter) adapter).isEnabled(p);
843+
}else if(adapter instanceof ListAdapter){
844+
enable &= ((ListAdapter) adapter).isEnabled(p);
845+
}else if(adapter instanceof HeaderViewListAdapter){
846+
enable &= ((HeaderViewListAdapter) adapter).isEnabled(p);
847+
}
848+
}
849+
}
850+
return enable;
851+
}
852+
853+
private boolean insideAdapterView(){
854+
return getAdapterView() != null;
855+
}
856+
857+
private AdapterView getAdapterView(){
858+
ViewParent t = getParent();
859+
while(t != null){
860+
if(t instanceof AdapterView){
861+
return (AdapterView)t;
862+
}
863+
t = t.getParent();
864+
}
865+
return null;
866+
}
867+
868+
821869

822870
private GestureDetector gestureDetector = new GestureDetector(getContext(), new SwipeDetector());
823871
class SwipeDetector extends GestureDetector.SimpleOnGestureListener{
@@ -838,9 +886,10 @@ public boolean onSingleTapUp(MotionEvent e) {
838886
ViewParent t = getParent();
839887
while(t != null) {
840888
if(t instanceof AdapterView){
841-
int p = ((AdapterView) t).getPositionForView(SwipeLayout.this);
889+
AdapterView view = (AdapterView)t;
890+
int p = view.getPositionForView(SwipeLayout.this);
842891
if( p != AdapterView.INVALID_POSITION &&
843-
((AdapterView) t).performItemClick(((AdapterView) t).getChildAt(p),p , ((AdapterView) t).getAdapter().getItemId(p)))
892+
view.performItemClick(view.getChildAt(p), p, view.getAdapter().getItemId(p)))
844893
return true;
845894
}else{
846895
if(t instanceof View && ((View) t).performClick())

0 commit comments

Comments
 (0)