NavigationDrawerSpinnerItem - Listener reagiert zu häufig

  • Hey folks, ich habe derzeit in meiner App einen NavigationDrawer eingebaut, dieser kann auch Spinner Items fassen. Diese Spinner Items haben natürlich einen OnItemSelectedListener, und die Methode onItemSelected springt andauernd an, auch ohne das ich auf eins der Items klicke. Zum prüfen mache ich bei sowas immer einen Toast hinein, diesen erkennt man am schnellsten.


    Hier mein NavigationDrawer und ganz oben ein SpinnerItem...
    [Blockierte Grafik: http://preview.slick.pics/FT0ay9z45.png]


    der Listener springt zum Beispiel an sobald die App gestartet wird, ich vermute sobald der NavigationDrawer erstellt wird. Desweiteren springt er an wenn ich im NavigationDrawer nach unten un wieder hoch scrolle ( ich habe sehr viele Einträge ), also sobald das SpinnerItem nach oben hinaus geschoben wird, und wieder herein kommt.


    Das alles ist natürlich ziemlich nervig, da diese Items ja irgendwann Activities starten oder Fragmente tauschen.


    Hier mein Code...


    Ich habe schon versucht einen OnItemClickListener einzubauen, der Compiler bringt keine Fehler aber sobald ich dann meine App starte, crasht diese mit dem Fehler das man mit einem Spinner kein OnItemClickListener verwenden kann.


    Wie kann ich es also erreichen das meine Einträge im Spinner nur bei einem Click darauf das machen was sie sollen?


    LG proto

  • Ich fürchte, den wichtigen Codeteil enthältst Du uns vor. ;)


    Irgendwo sagst Du dem Spinner sicherlich, was er vorausgewählt haben soll. Vermutlich via 'setSelectedItem'.
    Und das ruft dann den OnSelectedItemListener auf. Also alles so wie es sein soll.


    Eine (gute) Möglichkeit wäre es, 'setSelectedItem' des SpinnerAdapters aufzurufen bevor Du den Listener registrierst.
    Meines Wissens wird die Selektion nicht nachträglich aufgerufen.

    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!«

  • Hier meine ganze Klasse des Adapters... Ab Zeile 69 wird ein Item als Spinner erkannt und eingebunden.



    Ich habe kein Fall gefunden wo ich dem Spinner sage welches Item er setzen soll. Das aber jedes mal der Listener wieder anspringt wenn ich scrolle finde ich eben so seltsam...


    Hier das Anlegen der verschiedenen Elemente für den Navigation Drawer...

    Java
    dataList = new ArrayList<CustomDrawerItem>();
    	dataList.add(new CustomDrawerItem(true, new String[]{"Ein- / Ausgänge", "Baugruppen", "FIFO", "Systemsteuerung"})); // adding a spinner to the list
    	dataList.add(new CustomDrawerItem("My Favorites")); // adding a header to the list
    	dataList.add(new CustomDrawerItem("Message", R.drawable.ic_action_email));
    .
    .


    Hier die Konstruktoren des CustomDrawerItem...


    Hier wird die dataList verwendet...

    Java
    mDrawerList = (ListView) findViewById(R.id.left_drawer);
    	adapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item, dataList);
    	mDrawerList.setAdapter(adapter);
    .
    .


    Dieser komische Listener bringt mich noch zur Weißglut :O :O :O

  • Also in dem Fall muss irgendwas mit Deiner DrawHolder.Spinner Verdrahtung kaputt sein.


    Lass Dir mal ausgeben, was genau DrawHolder.Spinner für ein Objekt zur Laufzeit ist.

    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!«

  • Das sieht sehr gut aus.
    Was es insgesamt noch etwas schwieriger macht.


    Die nächste logische Idee wäre, dass Du Dich im betreffenden onItemSelected() mit einem Breakpoint reinhängst und jeweils schaust, welchen Typ und Wert arg0 hat.
    Eigentlich kann es nur noch sein, dass sich Spinner und Drawer einen Adapter teilen, aber das wäre unrealistisch.

    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!«

  • könnte es an meinem CustomSpinnerAdapter liegen ???


  • Wie gesagt, bei der Erstellung muss ja bei einigen Views (Spinner) eine Auswahl getroffen werden, damit überhaupt was angezeigt wird.


    Das hängt aber sicherlich nicht mit dem Auswählen aus der Liste zusammen.

    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!«

Jetzt mitmachen!

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