Frage

Ich bin mit Tabellen-Layout-Daten anzuzeigen, aber ich will es wie Listenelemente verhalten (Fähigkeit zu wählen, wenn das Auswahl Hintergrund ändern, wenn Sie auf, Hover-Effekt, klicken Lage) zu diesem Zweck i folgende Zuhörer sind mit

  • OnClickListener(to perform action)
  • OnFocusChangeListener(To change background color)
  • OnTouchListener(to focus specific row)

Jetzt Problem ist, wenn Benutzer berühren jedes Element es Fokus zuerst und dann wieder Onclick-Ereignis zu Feuer berühren müssen, um dies zu beheben habe ich eine Änderung und OnTouch i Feuer Aktion auf die spezifisch für Zeile.

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_UP){
        v.requestFocus();
        int viewId= v.getId();
        handleEvent(viewId);//Switch cases to perform row specific actions.
    }
    return false;
}

Jetzt, wenn der Benutzer die Zeile Ereignis get berühren gefeuert das funktioniert perfekt, aber ein weiteres Problem erhebt sich hier selbst wenn Benutzer möchten die Daten nach unten zu rollen über Drag Finger auf den Bildschirm ontouch Ereignis get gefeuert .... und Aktion automatisch durchgeführt, obwohl Mitglieder halten es wird der Bildschirm scroll down.

War es hilfreich?

Lösung

Ich weiß nicht, ob diese Lösung in Ihrem Fall anwendbar ist, aber vielleicht können Sie wie folgt vorgehen: Nehmen wir an, dass Benutzer Ihren Artikel geklickt (so haben Sie wahrscheinlich Folge von drei Veranstaltungen, die Ihre OnTouch bekommen () -Methode:.. Action_ AB, action_ MOVE (nicht unbedingt) und ACTION_UP Jetzt können Sie entsprechend reagieren

  1. Wenn es ACTION_DOWN, können Sie x und y-Koordinaten speichern.
  2. Wenn es action_ MOVE, um seine x und y und berechnen den Abstand von ACTION_DOWN entspricht. Wenn es länger als einige angenommener Wert, dann die Scroll machen und das Flag gesetzt, das anzeigt, dass Gegenstände gescrollt wurden.
  3. Wenn es ACTION_UP Ihre Flagge überprüfen. Wenn Einzelteile nicht gescrollt wurden, die Aktion aus und das Flag löschen.

Wahrscheinlich Berechnungen sind nicht das, was Sie in ACTION_MOVE Fall tun sollen, weil es schnell sein sollte, aber es zu versuchen.
Viele Grüße!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top