2014-04-24 3 views
1

내가이 나는 해결책 코드를있는 ScrollView 레이아웃 내부에 사용 스크롤 (루트 레이아웃) 내가 자식 스크롤 scrolling.For을 중지하는 것이 한 .when을 발견 않았다내 응용 프로그램에서

childlistview.setOnTouchListener(new ListView.OnTouchListener() { 


     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      int action = event.getAction(); 
      switch (action) { 
      case MotionEvent.ACTION_DOWN: 
      v.getParent().requestDisallowInterceptTouchEvent(true); 
      break; 

      case MotionEvent.ACTION_UP: 
      v.getParent().requestDisallowInterceptTouchEvent(false); 
      break; 
      } 

      v.onTouchEvent(event); 
      return false; 
     } 
     }); 

그것을 문제를 해결했습니다.하지만이 코드를 이해할 수 없습니다. 누구든지 도와 줄 수 있습니까?

답변

2

Scrollview 부모입니다.

정상적인 경우 스크롤하려고하면 ScrollView이 해당 이벤트를 가로 채고 ScrollView의 스크롤이 발생합니다. 그것은 이미 부모 ScrollView에 의해 handlled대로 내 ListView에 도달하지 않습니다.

그러나 ListView으로 TouchListener을 설정하고 수행 한대로 onTouch()을 무시하면 다른 동작이 관찰됩니다.

case MotionEvent.ACTION_DOWN: 

이 이벤트는 첫 번째 손가락을 화면에 눌렀을 때 발생합니다.

v.getParent().requestDisallowInterceptTouchEvent(true); 

이렇게하면 부모가 터치 이벤트를 가로 채지 못하도록하여 해당 이벤트를 적절하게 처리 할 수 ​​있습니다.

case MotionEvent.ACTION_UP: 

이 이벤트는 모든 손가락이 화면에서 벗어난 경우에 발생합니다.

v.getParent().requestDisallowInterceptTouchEvent(false); 

이렇게하면 부모가 자식보기를 떠나는 나머지 화면에 대해 터치 이벤트를 가로 챌 수 있습니다.

희망이 있으면 도움이됩니다. 이러한 명확한 설명을위한

+0

감사합니다. @ Ritesh Gune – karthikeyan

+0

오신 것을 환영합니다, 당신과 함께 공유 할 수 다행. :) –

0
v.getParent().requestDisallowInterceptTouchEvent(true); 

단순히 부모의 만지기를 비활성화합니다. View. 귀하의 경우는 부모 아이 뷰 (v)의 (ScrollView) 터치를 해제합니다. 상위 터치를 활성화하려면

는 다시, 단순히 같은 방법으로 false를 전달합니다.

의심의 여지가 없기를 바랍니다. ListView이 자식 반면 귀하의 경우에는