2013-01-10 7 views
0

Flipper를 부모로, Listview를 자식으로 사용하고 있습니다. 내 문제는 목록보기에서 항목을 뒤집고 클릭하는 것입니다. 다음 페이지로 넘어갈 때 (오른쪽에서 왼쪽으로 드래그하여) 실수로 목록 항목을 클릭합니다.안드로이드의 Flipper 및 ListView

제스처를 이미 내렸을 때 listview의 onClick을 어떻게 비활성화 할 수 있습니까?

코드 :

플리퍼 Ontouch :

public boolean dispatchTouchEvent(MotionEvent touchevent) { 
     super.dispatchTouchEvent(touchevent); 
     switch (touchevent.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
     lastX = touchevent.getX(); 
     break; 
    } 
    case MotionEvent.ACTION_UP: { 
     float currentX = touchevent.getX(); 
     if (lastX - 100 > currentX) { 
      if (result_pageNum < max_pageNum) { 
       result_pageNum++; 
       if (vf.getDisplayedChild() == 0) { 
        listView[1].setClickable(false); 
        setListView(1); 
       } else { 
        listView[0].setClickable(false); 
        setListView(0); 
       } 
       vf.setInAnimation(this, R.anim.in_from_right); 
       vf.setOutAnimation(this, R.anim.out_to_left); 
       vf.showNext(); 
      } 
     } else if (lastX + 100 < currentX) { 
      if (result_pageNum > 0) { 
       result_pageNum--; 
       if (vf.getDisplayedChild() == 1) { 
        listView[0].setClickable(false); 
        setListView(0); 
       } else { 
        listView[1].setClickable(false); 
        setListView(1); 
       } 
       vf.setInAnimation(this, R.anim.in_from_left); 
       vf.setOutAnimation(this, R.anim.out_to_right); 
       vf.showPrevious(); 
      } 
     } 
     break; 
    } 
    } 
    return false; 
} 

목록보기의 onclick :

날뛰는 제스처가 (ACTION_UP 이벤트에서) 발견되었습니다 당신의 dispatchTouchEvent 방법에
private void listView_onClick() { 
    for (int i = 0; i < listView.length; i++) { 
     listView[i].setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // When clicked, show a toast with the TextView text 

Toast.maketext(this,"Working!",Toast.LENGTH_LONG).show(); 

      } 
     }); 
    } 

} 
+1

ViewFlipper가 복잡한 ViewGroups (예 : ListView)를 염두에두고 개발되었다고 생각하지 않습니다. 이전에는 단순한 ImageView에만 사용했습니다. 그, 나는 ViewPager를 사용하여 목록보기,지도 조각, 그리고 그것은 잘 작동합니다. 어쩌면 다시 생각하고 바꿔야 할 것입니다. – Budius

답변

0

, 시도 반환 사실 부울 값으로 오히려 그쪽으로 매번 false를 반환합니다. 움직임 계산에 따라 제스처 동작이 감지되지 않으면 false 만 반환하십시오.

0

이 목적으로 실제로는 dispatchTouchEvent(MotionEvent)을 사용하면 안됩니다.

대신 onInterceptTouchEvent(MotionEvent)onTouchEvent(MotionEvent)을 사용해야합니다.

이러한 방법 사이의 관계

는 방법 '자바 독에 설명되어 있지만, 요약과 같이

onInterceptTouchEvent(MotionEvent)은 어떤에서 사용자의 터치 이벤트는 아이 뷰의 ViewGroup 차단 여부를 결정합니다. 예를 들어, ViewFlipper은 ListView가 이벤트를 수신하는지 여부를 결정합니다.

onTouchEvent(MotionEvent)은 귀하의 ViewFlipper이 실제로 터치 이벤트에 반응 할 수있는 곳입니다.

+0

시간 내 주셔서 감사합니다. onInterceptTouchEvent (MotionEvent)에 대한 샘플을 찾고 있는데 일부를 찾을 수 없습니다. 나는 그것을 사용하는 방법을 혼란스러워합니다. 내 Flipper는 onTouchEvent (MotionEvent)에있을 것입니까? 하지만'onInterceptTouchevent (MotionEvent)'에 무엇을 넣을까요? –

+0

ViewFlipper 대신 [ViewPager] (https://developer.android.com/reference/android/support/v4/view/ViewPager.html)를 사용하지 않는 이유는 무엇입니까? 이미이 모든 것이 구현되어 있습니다. –

+0

ViewFlipper와 같은 기능을 사용할 수 있습니까? 다른 XML을 변경하지 않고도? 하위보기 만 나는 그것을 시도하지 않았지만 ViewPager를 xml에서 다른 xml로 시도했다. –

관련 문제