2016-08-03 12 views
2

zu verbrauchen Was ich wollenwie Header von Listview machen nicht das Berührungsereignis

ich den Header von Listview möchte nicht das Berührungsereignis

Problem ein

Ich habe zu konsumieren FrameLayout.In diesem gibt es eine Kartenansicht und eine Listenansicht. Die Listview hat eine transparente Header-Ansicht, um mehr von der Mapview anzuzeigen. Jetzt die Antwort der Header-Ansicht auf die Berührungsereignisse, aber ich möchte diese Ereignisse an die Mapview senden. Wie macht man?

Ich habe versucht

  • headerView.setEnabled(false)
  • headerView.setClickable(false)
  • mListView.addHeaderView(headerView, null, false)

Alle von ihnen scheiterten, einen Rat?

+0

die einzige Möglichkeit, dass ich denke, um zu verhindern, dass die Kopfzeile das Touch-Ereignis konsumiert, ist das Einstellen der Sichtbarkeit auf Invisible. – Max

+0

Denkst du @Anders. Ich habe deine Lösung versucht, aber nicht funktioniert ... – Ninja

Antwort

2

ich viele Lösungen in SO versuchen, aber sie sind work.Finally nicht, ich überschreiben die dispatchTouchEvent() Funktion, es works.Complete Version über gist ist und Schlüsselcode ist hier drin.

@Override 
public boolean dispatchTouchEvent(MotionEvent motionEvent) { 
    if(mHeaderView == null) return super.dispatchTouchEvent(motionEvent); 
    if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){ 
     //if touch header not to consume the event 
     Rect rect = new Rect((int) mHeaderView.getX(), (int) mHeaderView.getY(), mHeaderView.getRight(), mHeaderView.getBottom()); 
     if(rect.contains((int)motionEvent.getX(), (int)motionEvent.getY())){ 
      isDownEventConsumed = false; 
      return isDownEventConsumed; 
     }else { 
      isDownEventConsumed = true; 
      return super.dispatchTouchEvent(motionEvent); 
     } 
    }else{ 
     //if touch event not consumed, then move/up event should be the same 
     if(!isDownEventConsumed)return isDownEventConsumed; 
     return super.dispatchTouchEvent(motionEvent); 
    } 
} 
+0

das funktionierte auch für mich! –

+0

@PranoyC Froh, den Code zu sehen, der Ihnen hilft – Ninja

0

Haben Sie versucht, onClickListener Null zu setzen, während Kopfzeile oder this aufblasen?

+0

Ich habe versucht, aber nicht funktionieren. endlich überschreibe ich die 'dispatchTouchEvent()' Funktion, es funktioniert ~ – Ninja