11
11
import android .view .View ;
12
12
import android .view .ViewGroup ;
13
13
import android .view .ViewParent ;
14
+ import android .widget .Adapter ;
14
15
import android .widget .AdapterView ;
16
+ import android .widget .BaseAdapter ;
15
17
import android .widget .FrameLayout ;
18
+ import android .widget .HeaderViewListAdapter ;
19
+ import android .widget .ListAdapter ;
16
20
17
21
import java .util .ArrayList ;
18
22
import java .util .HashMap ;
@@ -713,8 +717,12 @@ private boolean childNeedHandleTouchEvent(View v, MotionEvent event){
713
717
@ Override
714
718
public boolean onTouchEvent (MotionEvent event ) {
715
719
720
+ if (!isEnabledInAdapterView ())
721
+ return true ;
722
+
716
723
int action = event .getActionMasked ();
717
724
ViewParent parent = getParent ();
725
+
718
726
gestureDetector .onTouchEvent (event );
719
727
Status status = getOpenStatus ();
720
728
ViewGroup touching = null ;
@@ -818,6 +826,46 @@ public boolean onTouchEvent(MotionEvent event) {
818
826
return true ;
819
827
}
820
828
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
+
821
869
822
870
private GestureDetector gestureDetector = new GestureDetector (getContext (), new SwipeDetector ());
823
871
class SwipeDetector extends GestureDetector .SimpleOnGestureListener {
@@ -838,9 +886,10 @@ public boolean onSingleTapUp(MotionEvent e) {
838
886
ViewParent t = getParent ();
839
887
while (t != null ) {
840
888
if (t instanceof AdapterView ){
841
- int p = ((AdapterView ) t ).getPositionForView (SwipeLayout .this );
889
+ AdapterView view = (AdapterView )t ;
890
+ int p = view .getPositionForView (SwipeLayout .this );
842
891
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 )))
844
893
return true ;
845
894
}else {
846
895
if (t instanceof View && ((View ) t ).performClick ())
0 commit comments