wake-up-neo.com

Der Spinner zeigt den ausgewählten Wert nicht an

Ich habe den Spinner implementiert, indem ich die Array-Liste über die Datenbank ausgefüllt habe. Ich kann die Array-Liste in meinem Spinner-Array-Adapter abrufen und anzeigen, aber wenn ich das Element im Spinner auswähle, wird es nicht im Spinner angezeigt. Was hatte ich hier falsch?

Hier ist mein Code,

 Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
     ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,Android.R.layout.simple_spinner_item, providerlist);

  adapter1.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);

Ich bekomme die ausgewählte Elementzeichenfolge,

Spinner provid = (Spinner)findViewById(R.id.prospin);
String provider =provid.getSelectedItem().toString();

Kann mir jemand helfen, pls !!!

23
Jolly

Diese Antwort ist vielleicht etwas dumm, aber probieren Sie es aus. Es hat für mich funktioniert. 

  1. Überprüfen Sie die Hintergrundfarbe Ihres Spinners!
  2. Und wenn es weiß ist, ändere es
  3. Geniesse es!
39
Catluc

Ich habe das gleiche Problem bekommen und durch das Hinzufügen von notifyDataSetChanged() nach dem Binden von Daten in Spinner gelöst.

Zuerst habe ich einen Bindungsadapter mit Blank ArrayList und dann eine Liste der Elemente vom Server abgerufen und dieser Liste hinzugefügt, aber nach der aktualisierten Liste notifyDataSetChanged() vergessen.

füge einfach adapter.notifyDataSetChanged(); nach der Aktualisierung der Liste hinzu.

Hoffe es wird hilfreich sein.

12
Pratik Butani

Problem:

Der Spinner zeigt weder den Standardwert noch den ausgewählten Elementwert an. Dropdown-Menüelemente werden jedoch angezeigt, wenn sie ausgewählt werden.

Ursache:

Hintergrund und Textfarbe sind beide weiß !!!

Lösungen:

xml (bevorzugt):

Schreiben Sie ein benutzerdefiniertes Layout für ein Spiner-Element und verwenden Sie es anstelle des Standardwerts Android.R.layout.simple_spinner_item.

Wie kann ich die Größe und Textfarbe des Spinners ändern?

Code (weniger zuverlässig):

your_spinner_instance.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
                               long id) {
        ((TextView) view).setTextColor(Color.RED);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }

});

Android braucht ein größeres Update oder vielleicht sollten Dart und Flatter die Leitung übernehmen ... 

Danke Catluc

10
TastyCatFood

Verwenden Sie wrap_content für die Höhe von Spinner

Wahrscheinlich hat es nicht genug Höhe, um Text anzuzeigen. 

3
Mladen Rakonjac

wenn Sie einen benutzerdefinierten Adapter haben, sollten Sie die TextView-Textfarbe ändern

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView view = (TextView) super.getView(position, convertView, parent);
    view.setTextColor(Color.parseColor("#000000"));
    return view;
}

wenn Sie keinen benutzerdefinierten Adapter haben, sollten Sie einfach den Spinner-Hintergrund ändern

3
Ali Salesi

Nun, das passiert auch, wenn der Kontext nicht richtig angegeben ist. Ich verwendete getApplicationContext() wo es getBaseContext() braucht.

2
Vyshak Athreya

Versuche dies.

 final ArrayList<String> providerlist= new ArrayList<String>();
    Spinner spinner1 = (Spinner) findViewById(R.id.prospin);
    ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,Android.R.layout.simple_spinner_item, providerlist);

    adapter1.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
    spinner1.setAdapter(adapter1);
    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                            // On selecting a spinner item
            String item = providerlist.get(position);

            // Showing selected spinner item
            Toast.makeText(this,
                    "Selected Country : " + item, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
1
Quang Doan

Im Allgemeinen werden Spinner standardmäßig ausgewählt, wenn sie verwendet werden. Versuchen Sie daher, Leerstellen oder andere Daten auf die erste Position zu setzen, bei der es sich um eine Nullposition handelt. Sie erhalten die genaue Position des ausgewählten Elements. 

0
user6584366

Diese Antwort mag ein bisschen dumm sein, aber wenn Sie den gleichen Fehler begehen, versuchen Sie es mit ... Setzen Sie zuerst Werte in Ihre ArrayList und weisen Sie diese ArrayList dann dem Spinner zu . Ich habe eine globale ArrayList deklariert und zuerst auf Spinner gesetzt und addiere dann Werte von einer anderen Methode ... damals stand ich vor demselben Problem. Ansonsten können Sie notifyDataSetChanged () für Ihre arrayList angeben. 

0
Apeksha Gunjal

verwenden Sie das Android:spinnerMode="dropdown"-Attribut im xml des angegebenen Spinner-Elements.

Überprüfen Sie diese Links:

  1. http://www.technotalkative.com/Android-spinner-example/
  2. http://www.mkyong.com/Android/android-spinner-drop-down-list-example/

Andernfalls speichern Sie es bei der Auswahl des Elements:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapter, View v,
                    int position, long id) {
                // On selecting a spinner item
                String item = adapter.getItemAtPosition(position).toString();

                // Showing selected spinner item
                Toast.makeText(getApplicationContext(),
                        "Selected Country : " + item, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
0
Chintan Soni

versuchen Sie diesen Code ==> 

ArrayAdapter<String> stateNameAdaptor = new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_1, stateNameList);  
     stateNameAdaptor.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

spnState.setAdapter(stateNameAdaptor);
0
Abhijit Rajmane

Seltsam. Ich hatte das gleiche Problem. Was ich getan habe, damit es funktioniert: 1. Fügen Sie der Liste einige Anfangsdaten hinzu (zB - wählen Sie bitte - -) 2. Laden Sie die restlichen Daten und fügen Sie sie der Liste hinzu 3. Rufen Sie adapter.notifyDatasetChaged () auf.

0
kylexy1357

Das Problem von dem, was ich gefunden habe, war mit dem Stylesheet 

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <!-- Customize your theme here. -->
  <item name="windowNoTitle">false</item>
  <item name="windowActionBar">true</item>
  <item name="colorPrimary">@color/colorPrimary</item>
  <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  <item name="colorAccent">@color/colorAccent</item>
</style> 

Verwenden Sie dies für das XML-Layout

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:fitsSystemWindows="true"
    Android:paddingBottom="5dp"
    style="@style/AppTheme">

    <LinearLayout
        Android:orientation="vertical"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:paddingTop="5dp"
        Android:paddingLeft="24dp"
        Android:paddingRight="24dp">

        <TextView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Spinner"
            Android:layout_marginTop="10dp"
            Android:textColor="@color/colorBlack"/>

        <Spinner
            Android:id="@+id/Spinner"
            Android:layout_width="fill_parent"
            Android:layout_height="50dp"
            Android:backgroundTint="@color/colorPrimary"
            Android:textColorHint="#05ab9a"
            Android:padding="15dp"
            style="@style/Base.Widget.AppCompat.Spinner.Underlined"
            tools:targetApi="Lollipop" />
    </LinearLayout>
</ScrollView>

Und zum Schluss noch für die Klasse 

String [] NUMBERS= {"3 ","6 ","13 "};

Spinner s_spinner = (Spinner) findViewById(R.id.Spinner);

ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(this,
                    Android.R.layout.simple_dropdown_item_1line, NUMBERS);

// Specify the layout to use when the list of choices appears 
           spinnerAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);

// attaching data adapter to spinner
s_spinner.setAdapter(spinnerAdapter );
0
RodneyO

Ich hatte gerade dieses Problem und nachdem ich alle aufgeführten Lösungen ausprobiert hatte, stellte ich fest, dass das Problem darin bestand, dass ich den Drehregler layout_width Auf 60dp eingestellt hatte.

Es wurde in fill_parent geändert und das Problem wurde behoben.

0
JAMES MILLER

Für mich ist das Problem, dass ich getApplicationContext() verwende. Wenn ich zu this wechsle, funktioniert es einwandfrei.

ArrayAdapter<*> adapter = new ArrayAdapter<>(this, Android.R.layout.simple_spinner_item, documentsCategories);
0
Puni

Sie sollten den ersten Spinner verwenden, um die Werte zu erhalten.

Versuchen Sie den folgenden Code:

String provider = spinner1.getSelectedItem().toString();

Sie erhalten den Standardwert des Spinners.