5 Stimmen

Android - Text Dropdown/Auswahl von Spinner wird nicht angezeigt

Ich verwende diesen Beispielcode, um den Spinner aufzufüllen. Die Daten werden aus der Datenbank gelesen. Die Auswahl wird korrekt angezeigt - in diesem Fall zeigt sie "Grün" und "Rot".

    Spinner spinnerColor = (Spinner) findViewById(R.id.spinnertProfile);

    mProfileDbHelper = new ProfileDbAdapter(this);
    mProfileDbHelper.open();

    Cursor profilesCursor = mProfileDbHelper.fetchAllProfiles();
    startManagingCursor(profilesCursor);

    // Create an array to specify the fields we want to display in the list
    String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };

    // and an array of the fields we want to bind those fields to
    int[] to = new int[] { R.id.textviewColors };

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
            R.layout.profile_color, profilesCursor, from,
            to);

    spinnerColor.setAdapter(profilesAdapter);

}

Als ich jedoch zu einem anderen Layout wechselte Android.R.layout.simple_spinner_dropdown_item . Der Spinnertext ist verschwunden.

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
            R.layout.profile_color, profilesCursor, from,
            to);

    profilesAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinnerColor.setAdapter(profilesAdapter);

Siehe Schnappschüsse von ohne und mit einfach_spinner_dropdown_item unten: enter image description here

Vermisse ich vielleicht irgendetwas?

0 Stimmen

Est textviewColors verwendet in simple_spinner_dropdown_item ? Ich würde doppelt auf Tippfehler achten.

0 Stimmen

Qberticus, ich bin mir nicht sicher, ob ich verstehe, was Sie sagen wollen. Ich bin ein Android-Neuling :-) Die textviewColors ist die ID der TextView in der layout/profile_color.xml, auf die sich profilesAdapter bezieht, wenn er als SimpleCursorAdapter instanziiert. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="" android:id="@+id/textviewColors" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout>

3voto

Rich Schuler Punkte 41316

Ok, was passiert, ist, dass Sie beim Aufrufen von setDropDownViewResource ersetzen Sie das Layout, das Sie zuvor im Konstruktor angegeben haben. In Ihrem Fall R.layout.profile_color . SimpleCursorAdapter erweitert ResourceCursorAdapter und setzt im Konstruktor die beiden Layouts einander gleich.

public ResourceCursorAdapter(Context context, int layout, 
    Cursor c, boolean autoRequery) {

    super(context, c, autoRequery);
    mLayout = mDropDownLayout = layout;
    mInflater = (LayoutInflater)
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

Das Problem tritt auf, wenn Sie Folgendes aufrufen setDropDownViewResource und ändern Sie das Dropdown-Layout. Die SimpleCursorAdapter verwendet weiterhin die gleichen Ressourcenkennungen, die Sie im Konstruktor angegeben haben.

Was Sie tun sollten, ist, nur das Layout in der SimpleCursorAdapter Konstrukteur. Ich schlage vor, Ihren Code wie folgt zu ändern:

String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item

SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
        android.R.layout.simple_spinner_dropdown_item, profilesCursor, from, to);

spinnerColor.setAdapter(profilesAdapter);

Um die gewünschten Ergebnisse zu erzielen.

Verwenden Sie grundsätzlich nicht die setDropDownViewResource Methode. Wenn Sie das tun und die Ressourcenkennungen ändern, müssen Sie die Methode SimpleCursorAdapter#changeCursorAndColumns Aber das ist wahrscheinlich zu viel für das einfache Ergebnis, das Sie erreichen wollen.

2voto

Diogenese Punkte 31

SEHR WICHTIG! Ich habe mir fast die Haare ausgerissen, um herauszufinden, warum mein Code nicht funktioniert. Für diejenigen unter Ihnen, die das hier lesen und deren Code immer noch nicht funktioniert, stellen Sie sicher, dass int[] to = new int[] { Android.R.id.text1 }, wenn Sie die anderen Android-Layouts (wie Android.R.layout.simple_spinner_dropdown_item) verwenden. Der Code funktioniert nicht, wenn das Integer-Array textview nicht in dem angegebenen Layout enthalten ist, das Sie verwenden. Beim Debuggen meines Codes habe ich eine Menge Dinge geändert und vergessen, darauf zu achten, dass diese übereinstimmen. SO, wenn Sie Ihr eigenes Layout definieren, stellen Sie sicher, dass Sie eine Textansicht aus diesem Layout verwenden.

0voto

user370640 Punkte 83

Qberticus,

Ja, Sie haben Recht mit der Ressourcen-ID-Bindung!

Wenn ich jedoch mit Android.R.layout.simple_spinner_dropdown_item wird natürlich das Dropdown-Layout angezeigt, aber es ist nicht schön :-)

String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item

SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
     android.R.layout.simple_spinner_dropdown_item, profilesCursor, from, to);

spinnerColor.setAdapter(profilesAdapter);

alt text

Aber wenn ich jetzt anfange mit einfach_spinner_item zuerst, dann setDropDownViewResource zu simple_spinner_dropdown Element wird jetzt genau das angezeigt, wonach ich suche.

String[] from = new String[] { ProfileDbAdapter.COL_PROFILE_TITLE };
int[] to = new int[] { android.R.id.text1 }; // from simple_spinner_dropdown_item

SimpleCursorAdapter profilesAdapter = new SimpleCursorAdapter(this,
     android.R.layout.simple_spinner_item, profilesCursor, from, to);

profilesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinnerColor.setAdapter(profilesAdapter);

Vielen Dank für Ihre Hilfe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X