1111import android .view .View ;
1212import android .view .ViewGroup ;
1313import android .view .ViewParent ;
14+ import android .widget .Adapter ;
1415import android .widget .AdapterView ;
16+ import android .widget .BaseAdapter ;
1517import android .widget .FrameLayout ;
18+ import android .widget .HeaderViewListAdapter ;
19+ import android .widget .ListAdapter ;
1620
1721import java .util .ArrayList ;
1822import 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