Noch ein kleines Problem mit Gesten

  • Hallo,
    wieder habe ich ein kleines Problem mit den Gesten im meiner App. Diesmal habe ich eine ListView, die beim Start der Activity noch leer ist.
    Ich setze einen ItemClickListener

    Code
    listzumeintragen.setAdapter(liesteadapter); 
    listzumeintragen.setOnItemClickListener(new OnItemClickListener()
    {
    	@Override
    	public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) 
    	{
    		berechnenButton.setEnabled(true);
    		Schaltmenue();
    	}			
    });


    Danach binde ich dann, wenn der User das so möchte, das Erkennen und Reagieren auf Gesten ein.


    Steht nun boolean soll_gesten_beachten auf false, dann wird auch immer der setOnItemClickListener() ausgeführt.
    Ist boolean soll_gesten_beachten jedoch true funktioniert alles in der Aktivity, Listeneinträge werden hinzugefügt oder gelöscht und so weiter, auch der ausgewählte Listeneintrag ist richtig markiert, aber der setOnItemClickListener() wird nie ausgeführt, obwohl der Punkt im ListenItem anzeigt, dass etwas geschehen ist und das GestureOverlayView() die Aktion weiter gegeben hat.
    Welchen Fehler mache ich und wie kann ich es erreichen, dass der setOnItemClickListener() auch im GestureOverlayView() ausgeführt wird?
    Fragende, etwas ratlose Grüße,
    schymura ?(

  • lager die funktionalität des item click listeners doch einfach in eine methode aus?


    private void doSomethingOnClick() {
    }


    dann in der onItemClickListener die methode doSomethingOnClick aufrufne und beim gestenevent auch die methode aufrufen

  • Hallo ChampS,
    danke für die Antwort.
    Nur, wenn ich mache, was du vorschlägst

    Zitat

    dann in der onItemClickListener die methode doSomethingOnClick aufrufne und beim gestenevent auch die methode aufrufen

    dann habe ich nur erreicht, dass nun eine weiter Methode tot ist, wenn die Gesten beachtet werden sollen,
    weil ja der onItemClickListener dann nicht mehr aufgerufen werden.
    Wie geschrieben, das Ergeignis, Click auf einen Listeneintrag, wird ja an die Liste weitergegeben, denn sonst könnte sich da ja kein grüer Punkt zeigen, bei Auswahl (singleChoice). Der onItemClickListener wird dennoch nicht ausgefürht. Bei Test hatte ich da auch schon den Aufruf einer Meldung drin. Aber er wird halt nicht aufgerufen.
    Deshalb bleibe ich etwas ratlos, aber auf weitere Ideen hoffend,
    mit schönen Grüßen, schmyura :sleeping:

  • Hallo ChampS,
    es geht nicht um die Geste,

    Zitat

    deine geste wird doch ausgelöst, wenn du die methode in die gesten auslösung packst sollte die methode doch ausgelöst werden?!

    es geht darum, dass, wenn das Erkennen von Gesten angeschaltet ist, der OnItemClickListener nicht mehr ausgeführt (ausgelost) wird. Das Item auf das geklickt wurde ist dann jedoch markiert......
    Schaltet man, in der App, das Erkernnen der Gesten ab, so wird der OnItemClickListener auch ausgeführt.
    Schöne Grüße, schymura :sleeping:

  • Hallo ChampS,

    Zitat

    wie genau schaltest du denn gesten an und aus?

    der User kann in den Einstellungen (eine andere Activity) schalten, ob er Gesten nutzen möchte, oder ob sie nicht beachtet werden sollen.
    Über eine einfache

    Code
    if (soll_gesten_beachten)

    Abfrage wird dann beim Start jeder Activity, also auch beim Drehen des Smartphones entweder, siehe ganz oben beim Stellen der Frage, das notwenige Overlay geladen oder halt nicht.

    Zitat

    aber ich bin davon ausgegangen das das klicken auf ein item auch als geste zählt

    Nein, das zählt nicht als Geste, wird als solche auch nicht erkannt. Das kann man bei der App erkennen, wenn man in den Einstellungen aktiviert, dass die Gestenspur angezeigt werden soll. Bei Antippnen eines Items der Liste ist nur ein kleiner Punkt als Gestenspur zu sehen, zudem auch in der Intensität, mit der sonst nicht erkannte Gesten gezeichnet werden.
    Zudem ist es auch völlig egal ob man den Schwellwert der Gestenerkennung hoch oder runter setzt.
    Kein Unterschied, der OnItemClickListener wird nicht angesprochen.......
    Etwas unverständliiche Grüße, schymura ?(

  • Hallo ChampS,

    Zitat

    wird das onClick wirklich nich ausgeführt oder entsteht nur kein gewünschter effekt?

    nein, es wird wirklich nicht ausgeführt!
    Ich habe es schon etwa 24 mal überprüft, mit den verschiednesten Methoden...
    Dabei ist die einfachste Menthode bereits im allersten Quelltext enthalten

    Code
    berechnenButton.setEnabled(true);


    Der Button wird einfach nicht enabled. Da er vorher (wenn noch keine Auswahl in der LIste getroffen wurde) nicht aktivierbar ist sollte er bei einer Auswahl aktvierbar geschaltet werden. Wird er aber nicht.....
    Schöne Grüße, schymura :sleeping:

  • das problem ist, wenn du das mit iwelchen methoden, grafik elementen etc testest ob die onitemclick ausgelöst wird, können andere faktoren verhindern das alles korrekt ausgeführt wird.


    wenn du es mit einem system.out.println testest, bekommst du immer eine ausgabe.


    System.out.println("es geht");


    wenn du dann im logcat kein "es geht" siehst dann weißt du 100% das es nicht ausgelöst wird.
    wenn du es siehst, liegt der fehler wohl wo anders :P

  • Hallo ChampS,
    danke für die Antwort.
    Nun habe ich es nach deiner Methode gemacht, nachdem ich für Locat INFO eingestellt hatte und zur Sicherheit an einer anderen Stelle auch noch ein

    Code
    System.out.println

    mit anderer Ausgabe eingefügt hate.
    Die andere Ausgabe ist dann auch im Log zu sehen, jedoch

    Zitat

    wenn du dann im logcat kein "es geht" siehst dann weißt du 100% das es nicht ausgelöst wird.

    jetzt weiss ich es auch nach deiner Methode genau: der OnItemClickListener wird nicht ausgeführt.


    Schöne, erwartungsvolle Grüße, schymura :)

  • Hallo ChampS,

    Zitat

    setzt du vielleicht irgendwo setClickable false oder true?

    nein.
    Sonst würde es ja auch nicht funktionieren wenn das GestureOverlayView nicht über der ListView liegen würde (Quelltext beim Stellen der Frage).
    Wie gesagt, ich finde es unverständlich.
    schöne Grüße, schmura :)

  • naja kann ja sein dass das nur gesetz wird wenn die gesten aktiviert sind ;)


    du merkst sicher schon, ich weiß auch nicht woran es liegt aber ich versuch einfach mal dinge einzuwerfen an denen es liegen könnte.


    ein klick muss ja erkannt werden sonst würde sich nicht die farbe der zeile ändern auf die du klickst, ich versteh nur nich warum der onItemClick nicht ausgelöst wird


    vielleicht hilft dir ja der hirarchyviewer weiter

  • Hallo ChampS,
    ich danke dir jedenfalls für deine Antworten und Überlegungen.
    Ich kann es mir nur (theoretisch) so erklären, dass das GestureOverlayView das Ereingnis an die ListView weitergibt, diese dann den Auswahlpunkt setzt und dass dann das Ereignis als abgearbeitet vom
    GestureOverlayView betrachtet wird, so dass der OnItemClickListener nicht mehr ausgeführt wird. Eventuell ist der Ereignisweg ein anderer, wenn nicht das ListView direkt als Adressat des Ereigbnisses angespoechen wird....
    Aber das wäre dann ja ein wirklicher Fehler in Android. Das aber glaube ich nicht so wirklich, weil das dann ja auch schon vielen anderen aufgefallen sein müsste.
    Danke nochmal für deine Überlegungen,
    schöne Grüße, schymura ^^

  • ein press wird ausgelöst sonst würde der selector nicht anspringen und das item einfärben.


    die frage ist nun nur warum ein press ausgelöst wird aber kein item click


    versuch dochmal herauszufinden ob ein normaler clicklistener ausgelöst wird und kein itemclick

  • Hallo ChampS,

    Zitat

    versuch dochmal herauszufinden ob ein normaler clicklistener ausgelöst wird und kein itemclick

    ich weiss jetzt was dann ausgelöst wird.


    Zitat

    01-22 15:44:33.049: D/AndroidRuntime(1824): Shutting down VM
    01-22 15:44:33.049: W/dalvikvm(1824): threadid=1: thread exiting with uncaught exception (group=0x40018578)
    01-22 15:44:33.059: E/AndroidRuntime(1824): FATAL EXCEPTION: main
    01-22 15:44:33.059: E/AndroidRuntime(1824): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.schymura.biorhythmus/com.schymura.biorhythmus.DatenActivity}: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead

    Schöne Grüße, schymura ^^

  • Hallo nochmal ChampS,
    interssanterweise funktioniert auch diese Variante nicht:


    Also muss es doch im GestureOverlayView irgendwelche Möglichkeiten der Einstellung geben, die ich bisher noch nicht gefunden oder verstanden habe.
    Schöne Grüße, schymura :-X

  • MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!