Spinner ausgewählte Artikel Text erhalten?


370

Wie erhalte ich den Text eines vom Spinner ausgewählten Elements?

Ich muss den Text auf dem in meinem Spinner ausgewählten Element abrufen, wenn ich auf die Schaltfläche Speichern klicke. Ich brauche den Text nicht den Index.

Antworten:


772
Spinner spinner = (Spinner)findViewById(R.id.spinner);
String text = spinner.getSelectedItem().toString();

habe meine Frage hier gepostet stackoverflow.com/questions/5818850/…
Harsha MV

Ich habe den Code verwendet und das Ergebnis ist nicht das, was ich für den Debugging-Modus benötige. Ich habe festgestellt, dass es mir einen Wert wie {supliers = VITA} gibt. aber ich brauche nur den wert "vITA" irgendwelche ideen?
Pedro Teran

Beeindruckend! Das ist eine einfache Lösung! Großartig!
Pumpkee

Ich habe es versucht, aber ich habe den eigentlichen Text nicht erhalten. Ich habe eine Zeichenfolge erhalten, die ein Cursorobjekt darstellt: android.database.sqlite.SQLiteCursor@410dfae8wahrscheinlich, weil ich einen Cursoradapter verwendet habe. Irgendeine Idee, was ich tun soll, um die richtige Saite zu bekommen?
AdamMc331

Ja, der zurückgegebene Wert hängt vom Adaptertyp ab. Ihr Adapter muss eine Cursorbasis haben, damit er den Cursor zurückgibt. Versuchen Sie, es in den Cursor zu tippen, und rufen Sie dann Ihren Wert vom Cursor ab.
Farhan

38
TextView textView = (TextView)mySpinner.getSelectedView();
String result = textView.getText().toString();

6
Sie sollten immer eine Erklärung zu der von Ihnen vorgeschlagenen Lösung hinzufügen
Michal

34

Sie müssen den Index und den Adapter verwenden, um den Text herauszufinden, den Sie haben

Siehe dieses Beispiel von Spinner

public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
      Toast.makeText(parent.getContext()), "The planet is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}

4
Auch Sie brauchenspinner.setOnItemSelectedListener(this);
whiteLT

14

benutze das

import java.util.ArrayList;   
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class dynamic_spinner_main extends Activity {

    private Spinner m_myDynamicSpinner;
    private EditText m_addItemText;
    private ArrayAdapter<CharSequence> m_adapterForSpinner;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_spinner);

        ///////////////////////////////////////////////////////////////
        //grab our UI elements so we can manipulate them (in the case of the Spinner)
        //    or add listeners to them (in the case of the buttons)
        m_myDynamicSpinner = (Spinner)findViewById(R.id.dynamicSpinner);        
        m_addItemText = (EditText)findViewById(R.id.newSpinnerItemText);
        Button addButton = (Button)findViewById(R.id.AddBtn);
        Button clearButton = (Button)findViewById(R.id.ClearBtn);

        ////////////////////////////////////////////////////////////////
        //create an arrayAdapter an assign it to the spinner
        m_adapterForSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
        m_adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);        
        m_myDynamicSpinner.setAdapter(m_adapterForSpinner);
        m_adapterForSpinner.add("gr");        
        m_myDynamicSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                // your code here
                Intent mIntent=new Intent(dynamic_spinner_main.this,sampleLocalization.class);
                mIntent.putExtra("lang", m_myDynamicSpinner.getItemIdAtPosition(position));
                System.out.println("Spinner value...."+m_myDynamicSpinner.getSelectedItem().toString());
                startActivity(mIntent);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }

        });
        ////////////////////////////////////////////////////////////////
        //add listener for addButton
        addButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {               
                addNewSpinnerItem();
            }                   
        });

        ////////////////////////////////////////////////////////////////
        //add listener for addButton
        clearButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                clearSpinnerItems();
            }           
        });  
    }

    private void addNewSpinnerItem() {
        CharSequence textHolder = "" + m_addItemText.getText();
        m_adapterForSpinner.add(textHolder);
    }

    private void clearSpinnerItems() {
        m_adapterForSpinner.clear();
        m_adapterForSpinner.add("dummy item");
    }       
}

main_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <EditText android:layout_height="wrap_content" 
            android:layout_margin="4px" 
            android:id="@+id/newSpinnerItemText" 
            android:layout_width="fill_parent"></EditText>
    <Button android:layout_height="wrap_content" 
            android:id="@+id/AddBtn" 
            android:layout_margin="4px" 
            android:layout_width="fill_parent" 
            android:text="Add To Spinner"></Button>
    <Button android:layout_height="wrap_content" 
            android:id="@+id/ClearBtn" 
            android:layout_margin="4px" 
            android:layout_width="fill_parent" 
            android:text="Clear Spinner Items"></Button>
    <Spinner android:layout_height="wrap_content" 
            android:id="@+id/dynamicSpinner" 
            android:layout_margin="4px" 
            android:layout_width="fill_parent"></Spinner>
</LinearLayout>

13

Spinner gibt Ihnen den ganzzahligen Wert für das Array zurück. Sie müssen den Zeichenfolgenwert basierend auf dem Index abrufen.

Spinner MySpinner = (Spinner)findViewById(R.id.spinner);
Integer indexValue = MySpinner.getSelectedItemPosition();

10
spinner_button.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?>arg0, View view, int arg2, long arg3) {

            String selected_val=spinner_button.getSelectedItem().toString();

            Toast.makeText(getApplicationContext(), selected_val ,
                    Toast.LENGTH_SHORT).show();
        }

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

        }
    });

}

9

Einzeilige Version:

String text = ((Spinner)findViewById(R.id.spinner)).getSelectedItem().toString();

UPDATE: Sie können Casting entfernen, wenn Sie SDK 26 (oder neuer) zum Kompilieren Ihres Projekts verwenden.

String text = findViewById(R.id.spinner).getSelectedItem().toString();

7
TextView textView = (TextView) spinActSubTask.getSelectedView().findViewById(R.id.tvProduct);

String subItem = textView.getText().toString();

7

Nach dem Einstellen des Spinneradapters hilft dieser Code

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(getApplicationContext(), "This is " +
                    adapterView.getItemAtPosition(i).toString(), Toast.LENGTH_LONG).show();

            try {
                //Your task here
            }catch (Exception e)
            {
                e.printStackTrace();
            }
        }

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

        }
    });

3

Für Spinner, die auf einem CursorAdapter basieren:

  • Holen Sie sich die ausgewählte Artikel-ID: spinner.getSelectedItemId()
  • Rufen Sie den Elementnamen aus Ihrer Datenbank ab, zum Beispiel:

    public String getCountryName(int pId){
        Cursor cur = mDb.query(TABLE, new String[]{COL_NAME}, COL_ID+"=?", new String[]{pId+""}, null, null, null);
        String ret = null;
        if(cur.moveToFirst()){
            ret = cur.getString(0);
        }
        cur.close();
        return ret;
    }

1

Für diejenigen, die HashMap- basierten Spinner haben:

((HashMap)((Spinner)findViewById(R.id.YourSpinnerId)).getSelectedItem()).values().toArray()[0].toString();

Wenn Sie sich in einem Fragment, einem Adapter oder einer anderen Klasse als den Hauptaktivitäten befinden, verwenden Sie Folgendes:

((HashMap)((Spinner)YourInflatedLayoutOrView.findViewById(R.id.YourSpinnerId)).getSelectedItem()).values().toArray()[0].toString();

Es ist nur zur Orientierung; Sie sollten die ID Ihrer Ansicht vor der onClick-Methode finden.


1

Es kann auch in eine wenig erreicht wird sichere Art und Weise unter Verwendung von String.valueOf()wie so

Spinner sp = (Spinner) findViewById(R.id.sp_id);
String selectedText = String.valueOf(sp.getSelectedItem());

ohne die App zum Absturz zu bringen, wenn die Hölle losbricht. Der Grund für seine Sicherheit ist die Fähigkeit, mit nullObjekten als Argument umzugehen . Die Dokumentation sagt

Wenn das Argument ist null, dann ist eine Zeichenfolge gleich "null"; Andernfalls wird der Wert von obj.toString()zurückgegeben.

So gibt es dort eine Versicherung für den Fall, dass beispielsweise ein Leerzeichen vorhanden ist Spinner , in das der aktuell ausgewählte Artikel konvertiert werden muss String.


0
Spinner spinner = (Spinner) findViewById(R.id.yourspinnerid);
String text = spinner.getSelectedItem().toString();

Dies kann das Problem möglicherweise lösen, aber bitte geben Sie auch eine Erklärung. Viele neue Benutzer kommen zu SO und die Erklärung mit Ihrem Code hilft ihnen zu lernen, wie sie den Code anpassen können, um ihr Problem zu lösen.
JenB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.