Obtenir le texte des éléments sélectionnés de spinner?

370

Comment obtenir le texte de l'élément sélectionné spinner?

Je dois récupérer le texte de l'élément sélectionné dans mon spinner lorsque je clique sur le bouton Enregistrer. j'ai besoin du texte pas de l'index.

Harinder
la source

Réponses:

772
Spinner spinner = (Spinner)findViewById(R.id.spinner);
String text = spinner.getSelectedItem().toString();
Farhan
la source
ai posté ma question ici stackoverflow.com/questions/5818850/…
Harsha MV
J'ai utilisé le code et le résultat n'est pas ce dont j'ai besoin sur le mode de débogage. J'ai trouvé qu'il me donne une valeur comme {supliers = VITA}. mais je n'ai besoin que de la valeur "VITA" des idées?
Pedro Teran
Hou la la! C'est une solution simple! Génial!
pumpkee
J'ai essayé cela, mais je n'ai pas obtenu le texte réel. J'ai obtenu une chaîne représentant un objet curseur: android.database.sqlite.SQLiteCursor@410dfae8probablement parce que j'ai utilisé un adaptateur de curseur. Une idée de ce que je dois faire pour obtenir la bonne chaîne?
AdamMc331
oui, la valeur renvoyée dépend du type d'adaptateur. Votre adaptateur doit être à base de curseur pour qu'il renvoie le curseur. essayez de le transtyper en curseur puis récupérez votre valeur depuis le curseur.
Farhan
38
TextView textView = (TextView)mySpinner.getSelectedView();
String result = textView.getText().toString();
Ace
la source
6
vous devez toujours inclure des explications sur la solution que vous proposez - stackoverflow.com/questions/how-to-answer
Michal
34

Vous devez utiliser l'index et l'adaptateur pour trouver le texte que vous avez

Voir cet exemple de 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.
    }
}
ccheneson
la source
4
Vous avez également besoinspinner.setOnItemSelectedListener(this);
whiteLT
14

utilisez ceci

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>

la source
13

Spinner vous renvoie la valeur entière du tableau. Vous devez récupérer la valeur de chaîne en fonction de l'index.

Spinner MySpinner = (Spinner)findViewById(R.id.spinner);
Integer indexValue = MySpinner.getSelectedItemPosition();
Shaista Naaz
la source
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

        }
    });

}
Irfan Ali
la source
9

Version une ligne:

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

MISE À JOUR: Vous pouvez supprimer la diffusion si vous utilisez le SDK 26 (ou plus récent) pour compiler votre projet.

String text = findViewById(R.id.spinner).getSelectedItem().toString();
Miroslav Hrivik
la source
7
TextView textView = (TextView) spinActSubTask.getSelectedView().findViewById(R.id.tvProduct);

String subItem = textView.getText().toString();
user2294100
la source
7

Après avoir réglé l'adaptateur spinner, ce code vous aidera

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) {

        }
    });
Ahsan
la source
3

Pour les filateurs basés sur un CursorAdapter:

  • obtenir l'id de l'élément sélectionné: spinner.getSelectedItemId()
  • récupérer le nom de l'élément dans votre base de données, par exemple:

    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;
    }
Yar
la source
1

Pour ceux qui ont un spinner basé sur HashMap :

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

Si vous êtes dans un fragment, un adaptateur ou une classe autre que les activités principales, utilisez ceci:

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

C'est juste pour vous guider; vous devriez trouver l'identifiant de votre vue avant la méthode onClick.

Arash
la source
1

Il peut également être réalisé de manière un peu plus sûre en utilisant String.valueOf()comme ça

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

sans planter l'application quand tout l'enfer se déchaîne. La raison de sa sécurité est d'avoir la capacité de traiter des nullobjets comme argument. La documentation dit

si l'argument est null, alors une chaîne égale à "null"; sinon, la valeur de obj.toString()est retournée.

Donc, une assurance là-bas en cas d'avoir un vide Spinner par exemple, vers lequel l'élément actuellement sélectionné doit être converti String.

Étudiant
la source
0
Spinner spinner = (Spinner) findViewById(R.id.yourspinnerid);
String text = spinner.getSelectedItem().toString();
Fahad Jadun
la source
Cela pourrait bien résoudre le problème, mais veuillez également fournir une explication. De nombreux nouveaux utilisateurs viennent sur SO et l'explication de votre code les aide à apprendre à adapter le code pour résoudre leur problème.
JenB