Eigener ArrayAdapter für Spinner - ressource Layout und dropDownRessourceLayout verschieden.

  • Hallo leute, ich versuche gerade einen eigenen ArrayAdapter für einen Spinner zu bauen. Soweit funktioniert alles, bis auf die Optik, die bekomme ich einfach nicht so hin wie ich das möchte.


    Weshalb ich einen eigenen bauen MUSS ist einfach, gefüttert wird der Spinner mit einer localeList...

    Java
    ArrayList<Locale> localeList = new ArrayList<Locale>();



    in einer Locale steht nur die Abkürtung der Landessprache und evtl. noch ein Länderkürzel drin ( z.B. en_GB )
    Benutze ich folgenden einfachen Code, indem ich einfach einen ArrayAdapter benutz...

    Java
    ArrayAdapter<Locale> adapter = new ArrayAdapter<Locale>(this, R.layout.custom_spinner_item_languages, localeList);
        adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item);
        localeComboBox = (Spinner) mContext.findViewById(R.id.spinLanguages);
        localeComboBox.setAdapter(adapter);

    sieht mein Ergebnis folgendermaßen aus...
    [Blockierte Grafik: http://preview.slick.pics/FUZT8oD1j.png]
    Die Optik ist hier genau so wie ich es möchte... ist der Spinner zugeklappt ist die Schrift weiß. Quelle -> R.layout.custom_spinner_item_languages


    Doch die DropDownElemente sind blau, mit einer Checkbox
    Quelle -> R.layout.custom_spinner_checkbox_item


    Der Haken dabei ist das ich dem ArrayAdapter den ich benutzt habe nicht sagen kann das er statt dem Sprachkürzel der Locale die ausgeschriebene Variante nehmen soll. Deshalb habe ich selbst einen ArrayAdapter gebaut.

    Java
    CustomSpinnerAdapterLanguage adapter = new CustomSpinnerAdapterLanguage(Language.this, R.layout.custom_spinner_item_languages, localeList);
        adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item);
        localeComboBox = (Spinner) mContext.findViewById(R.id.spinLanguages);
        localeComboBox.setAdapter(adapter);

    Der CustomSpinnerAdapterLanguage bekommt die selben Layouts wie vorhin der der Standardlibrary.

    Mein Probelm wird darin liegen das ich der row die falsche layoutResId gebe ( Zeile 32 ) Ich habe aber keine Ahnung wie ich es anders machen soll. Das Ergebnis sieht folgendermaßen aus... Aufgrund das ich in Zeile 42 und 44 die Methode getDisplayLanguage der Locale benutze.
    [Blockierte Grafik: http://preview.slick.pics/FUZT8oKrn.png]
    Dieses mal passt der Text, und das Layout wenn der Spinner zugeklappt ist. Allerdings nimmt er dieses Layout ebenfalls für die DropDown Elemente :-/
    ich habe zwar, wie unter Bild 1 zu sehen ist, mit adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item) das korrekte Layout gesetzt, aber das wird vollkommen ignoriert.


    Vielleicht weiss jemand Rat, wie ich meine ArrayAdapter Klasse wohl verändern muss damit ich verschiedene Layouts für DropDown und nicht-DropDown Elemente setzen kann..

  • Naja, Du solltest schon das Layout rein laden, dass Du sehen möchtest.
    Wenn layoutResID die falsche ID ist, musst Du die korrekte ID finden.

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

  • Es gibt nicht "das rcihtige" Layout. Gebe ich dem Adapter die layoutResID mit von der "CustomSpinnerItemCheckbox" dann sieht das ganze so aus...
    [Blockierte Grafik: http://preview.slick.pics/FUaLxsQKp.png]


    Das würde mich ja nicht weiter stören, wenn beim obersten Element die Checkbox nicht zu sehen wäre ( also wenn der Spinner nicht aufgeklappt ist ).


    -------------------------------------------------------------------------------------


    Mein Ziel ist es aber 2 Layouts zu setzen, so wie es mit dem Standard ArrayAdapter auch möglich ist.


    Beim erstellen des Adapters gebe ich die layoutResId mit die für das oberste Element genutzt wird...

    Java
    ArrayAdapter<Locale> adapter = new ArrayAdapter<Locale>(this, R.layout.custom_spinner_item_languages, localeList);


    und danach gebe ich dem Adapter noch die layoutResId für die DropDownElemente...

    Java
    adapter.setDropDownViewResource(R.layout.custom_spinner_checkbox_item);


    Diese Methode wird von meiner selbstgeschriebenen ArrayAdapter ignoriert. und ich habe keine Ahnung wie ich dieses Problem lösen soll...

  • Neuer Tag, neues Glück ! bzw. ein ausgeruhtes Gehirn :P


    [Blockierte Grafik: http://preview.slick.pics/FUaNaWxh0.png]


    Lösung des Problems war das ich mir selbst ein Bein gestellt habe... Ich habe eine zweite "getCustomView" gebaut habe die, eine andere layoutResID benutzt.
    Zeile 70 setDropDownViewResource() überschrieben.
    Zeile 49 eine getCustomDropDownView erstellt, die die layoutResIDdropDown nutzt ( das Checkbox Item )
    und der ganze Trick dabei, in
    Zeile 20 getDropDownView überschreiben und getCustumDropDownView zurück geben lassen.
    Zeile 25 getView überschreiben und getCustumView zurück geben lassen.



Jetzt mitmachen!

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