¿Obtener el texto de los elementos seleccionados de la ruleta?

370

¿Cómo obtener el texto del elemento seleccionado de la ruleta?

Tengo que obtener el texto del elemento seleccionado en mi ruleta cuando hago clic en el botón Guardar. Necesito el texto, no el índice.

Harinder
fuente

Respuestas:

772
Spinner spinner = (Spinner)findViewById(R.id.spinner);
String text = spinner.getSelectedItem().toString();
Farhan
fuente
he publicado mi pregunta aquí stackoverflow.com/questions/5818850/…
Harsha MV
Usé el código y el resultado no es lo que necesito en el modo de depuración. Encontré que me da un valor como {supliers = VITA}. pero solo necesito el valor "VITA" alguna idea?
Pedro Terán
¡Guauu! ¡Esa es una solución fácil! ¡Excelente!
pumpkee
Intenté esto, pero no obtuve el texto real. Obtuve una cadena que representa un objeto de cursor: android.database.sqlite.SQLiteCursor@410dfae8probablemente porque usé un adaptador de cursor. ¿Alguna idea de lo que debo hacer para obtener la cadena correcta?
AdamMc331
Sí, el valor devuelto depende del tipo de adaptador. Su adaptador debe ser de base de cursor para que devuelva el cursor. intente escribirlo en el cursor y luego recupere su valor del cursor.
Farhan
38
TextView textView = (TextView)mySpinner.getSelectedView();
String result = textView.getText().toString();
As
fuente
66
siempre debe incluir una explicación sobre la solución que propone - stackoverflow.com/questions/how-to-answer
Michal
34

Tienes que usar el índice y el adaptador para averiguar el texto que tienes

Ver este ejemplo 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
fuente
44
También necesitasspinner.setOnItemSelectedListener(this);
whiteLT
14

utilizar este

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>

fuente
13

Spinner le devuelve el valor entero para la matriz. Tiene que recuperar el valor de la cadena en función del índice.

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

Versión de una línea:

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

ACTUALIZACIÓN: puede eliminar la conversión si utiliza SDK 26 (o más reciente) para compilar su proyecto.

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

String subItem = textView.getText().toString();
usuario2294100
fuente
7

Después de configurar el adaptador giratorio, este código ayudará

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
fuente
3

Para hilanderos basados ​​en un CursorAdapter:

  • obtener la identificación del artículo seleccionado: spinner.getSelectedItemId()
  • busque el nombre del elemento de su base de datos, por ejemplo:

    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
fuente
1

Para aquellos que tienen un spinner basado en HashMap :

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

Si está en un Fragmento, un Adaptador o una Clase que no sean actividades principales, use esto:

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

Es solo para orientación; deberías encontrar la identificación de tu vista antes del método onClick.

Arash
fuente
1

También se puede lograr de una manera un poco más segura usando String.valueOf()así

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

sin bloquear la aplicación cuando se desata el infierno. La razón detrás de su seguridad es tener la capacidad de tratar con nullobjetos como argumento. La documentación dice

si el argumento es null, entonces una cadena igual a "null"; de lo contrario, obj.toString()se devuelve el valor de .

Por lo tanto, hay un seguro allí en caso de tener un vacío, Spinner por ejemplo, al que se debe convertir el elemento seleccionado actualmente String.

Estudiante
fuente
0
Spinner spinner = (Spinner) findViewById(R.id.yourspinnerid);
String text = spinner.getSelectedItem().toString();
Fahad Jadun
fuente
Esto puede resolver el problema, pero también proporcione una explicación. Muchos usuarios nuevos llegan a SO y la explicación con su código les ayuda a aprender cómo adaptar el código para resolver su problema.
JenB