ListView und OnTouchListener

  • Hallo liebe Android-Cracks,
    ich habe folgendes Problem:
    Ich fülle eine ListView dynamisch mit Termindaten eines Kalendertages.
    Mit einem OnTouchListener ermittle ich Wischgesten von links nach rechts und umgekehrt.
    Den Status der Wischgesten greife ich in der onItemClick-Callbackmethode der AdapterView ab.
    Je nachdem in welche Richtung gewischt wird werden die Termine des jeweiligen Vortages oder die des Tages danach eingelesen und in der ListView dargestellt.
    Das Ganze funktioniert eigentlich wunderbar, aber:
    nur dann wenn die ListView über soviele Items (also Termine) verfügt, daß die View auch gefüllt ist, weil nur ein Click bzw. Wischen auf einem ListView-Item den onItemClick auslöst.
    Samstag und Sonntag z.B. ist grundsätzlich nur ein Termin(Item) eingetragen.
    Wische ich auf dem einen Item geht's gut, wische ich in der "leeren Fläche" rührt sich ganz genau gar nichts.
    Mit emptyView kann ich nicht arbeiten, denn die AdapterView ist ja gar nicht empty, sondern verfügt über ein Item.
    Eine onClick-Methode kann ich der ListView ebenfalls nicht hinzufügen, da wird dann ein Fehler ausgeworfen ich soll doch bitteschön onItemClick verwenden.


    Wie kann ich die "leere Fläche" dazu bewegen auf Clicks zu reagieren? Geht das überhaupt?
    Grüße und schon jetzt vielen Dank für die Hilfe.
    JSt

  • Dein Bedienkonzept scheint mir ein wenig an der Realität vorbei. Du wischt auf einem Eintrag herum, tauscht aber alle Inhalte aus.
    (Normalerweise würde ICH denken: wische auf Eintrag nach links -> wird abgebrochen; wische auf Eintrag nach rechts -> wird auf morgen verschoben.)


    Wie dem auch sei, Du kannst eigentlich jedem View einen OnClickListener mitgeben.
    Wenn Du Deine Logik also nicht in die onItemClick–Callbackmethode des AdapterView packst (denn wie Du selbst festgestellt hast, wird die aufgerufen, wenn ein Item angeklickt wird) sondern in die onClick–Callbackmethode des AdapterView, sollte das passen.


    Es kann dann im Nachhinein natürlich wichtig sein, dass Du die Touchevents an die darunterliegenden klickbaren Items weiterreichst.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo,
    recht herzlichen Dank für Deine Antwort.
    Ich habe schon versucht zusätzlich zum OnItemClickListner noch den einen OnClickListener anzuhängen, dann stürzt aber die Activity nach dem Start ab und ich erhalte dann die unten stehende Meldung im logcat.
    Mit diesem OnClickListener-Aufuf:

    Code
    this.patlistview.setOnClickListener(new AdapterView.OnClickListener(){
                @Override
                public void onClick(View v) {
                    System.out.println("Click-Event angekommen");
                }
    });

    erhalte ich nach dem Start diese Fehlermeldung.


    Code
    03-31 12:05:36.048    2096-2096/com.example.rtaadmin.pimobil D/AndroidRuntime﹕ Shutting down VM
    03-31 12:05:36.048    2096-2096/com.example.rtaadmin.pimobil W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40a13300)
    03-31 12:05:36.106    2096-2096/com.example.rtaadmin.pimobil E/AndroidRuntime﹕ FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rtaadmin.pimobil/com.example.rtaadmin.pimobil.TkActivity}: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)

    Danke Dir für die Hilfe

  • Oh, okay.
    Dann musst Du das auf ein anderes View packen. Beispielsweise das View der Activity/des Fragments.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Ich habe schon einen Listener auf die ContentView gelegt, der reagiert zwar ganz nett, nur nicht auf der Fläche der AdapterView, da herrscht Stillschweigen.
    Es ist als ob die AdapterView sobald auch nur ein kleiner Teil mit Items (also anderen Views) belegt ist alles andere überdeckt.
    Wenn man wüßte wie man an diese Schicht herankommen könnte, vielleicht würde das helfen.
    Grüße

  • Da herrscht Stillschweigen, weil Dein AdapterView höher in der Hierarchie hängt und entsprechend mehr abfängt.


    Eigentlich sind für solche Sachen ja auch eher die PagerAdapter gedacht.
    Ich weiß nur gerade nicht, wie so eins in Deine UI Gestaltung passen könnte.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo,
    die UI sieht so aus, daß ca. 80% der Höhe von der ListView benutzt wird. Während an Werktagen derart viele Items anfallen daß man sogar scrollen muß, ist an Wochenenden und Feiertagen in der Regel nur ein einziges Item vorhanden.
    Das heißt man muß jedesmal mit dem Finger hoch, da nur die Item-Fläche auf den Wischer reagiert.
    Der Listener den ich auf die contentView gelegt habe reagiert lediglich in der kleinen TextView die den eingestellten Tag anzeigt rechts oben.
    Beides ist sagen wir mal suboptimal.
    Grüße

  • In dem Fall solltest Du vielleicht einen ViewPager nutzen:


    https://developer.android.com/…imation/screen-slide.html
    https://developer.android.com/…rt/v4/view/ViewPager.html


    Spannend bleibt natürlich die Frage nach der Implementierung, denn eigentlich will man ja gar keine x Tabs sondern immer nur ein Fragment/View überschreiben.


    Ich glaube, ich spiel mal kurz. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Problem gelöst.
    ich habe die ListView in ein LinearLayout gepackt und die Höhe des Layouts auf wrap_content gesetzt.
    Unter dem Layout habe ich eine leere TextView mit der Höhe match_parent platziert.
    Sind weniger Items vorhanden als in die verfügbare Höhe paßt schnorrt wrap_content das Layout zusammen und die Wischgesten der ContentView werden durchgereicht.
    Herzlichen Dank an Marco Feltmann für die Unterstützung - klasse Forum!
    Gruß

Jetzt mitmachen!

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