Android: crea spinner mediante programación desde una matriz


198

Soy nuevo en Android y estoy tratando de crear un spinner programáticamente y alimentarlo con datos de una matriz, pero Eclipse me da una advertencia que no puedo manejar.

Esto es lo que obtuve:

Esta ArrayList contiene los elementos que deberían estar en la ruleta (se rellena desde un archivo más adelante):

ArrayList<String> spinnerArray = new ArrayList<String>();

Este es el código que encontré en un sitio que debería crear la ruleta:

Spinner spinner = new Spinner(this);
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
                android.R.layout.simple_spinner_dropdown_item,
                spinnerArray);
spinner.setAdapter(spinnerArrayAdapter);

Ahora la segunda línea (ArrayAdapter ...) me da una advertencia en Eclipse que dice "ArrayAdapter is a raw type... References to generic type ArrayAdapter<T> should be parameterized": No tengo idea de cómo solucionar esto (o lo que eso significa en primer lugar :)).

Es solo una advertencia y la aplicación parece funcionar bien, pero aún así me gustaría entender qué está mal y solucionarlo. Cualquier pista es apreciada.

Saludos, Select0r

Respuestas:


388

ArrayAdapter<String> Deberia trabajar.

es decir:

Spinner spinner = new Spinner(this);
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item,
           spinnerArray); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout
                                                     .simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter); 

Lo intenté pero el error solo cambia un poco :) Type safety: The expression of type ArrayAdapter needs unchecked conversion to conform to ArrayAdapter<String>
— Select0r

2
Comentó rápidamente mientras editaba su publicación :) Me perdí el segundo <String>, su código funciona ahora, ¡muchas gracias!
— Select0r

23
use ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(activity, R.layout.simple_spinner_item); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);o de lo contrario puede aparecer un botón de radio en la ruleta en algunos dispositivos.
— Ken

su respuesta fue útil y ¿podría decirme que si estoy usando dos hilanderos y quiero que si el primer hilandero solo funcione

1
también describe este método en la documentación de Android: developer.android.com/guide/topics/ui/controls/spinner.html
— WOUNDEDStevenJones

109

De la misma manera con Array

// Array of choices
String colors[] = {"Red","Blue","White","Yellow","Black", "Green","Purple","Orange","Grey"};

// Selection of the spinner
Spinner spinner = (Spinner) findViewById(R.id.myspinner);

// Application of the Array to the Spinner
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,   android.R.layout.simple_spinner_item, colors);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
spinner.setAdapter(spinnerArrayAdapter);

Hice esto usando una ArrayList porque mi matriz proviene de un bucle (no estático).
— Jacksonkr

61

Esto funcionó para mí con un conjunto de cadenas llamado shoescargado de los recursos del proyecto:

Spinner              spinnerCountShoes = (Spinner)findViewById(R.id.spinner_countshoes);
ArrayAdapter<String> spinnerCountShoesArrayAdapter = new ArrayAdapter<String>(
                     this,
                     android.R.layout.simple_spinner_dropdown_item, 
                     getResources().getStringArray(R.array.shoes));
spinnerCountShoes.setAdapter(spinnerCountShoesArrayAdapter);

Este es mi archivo de recursos ( res/values/arrays.xml) con el conjunto de cadenas llamado shoes:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="shoes">
        <item>0</item>
        <item>5</item>
        <item>10</item>
        <item>100</item>
        <item>1000</item>
        <item>10000</item>
    </string-array>
</resources>

Con este método es más fácil hacerlo multilingüe (si es necesario).


36

Esto realmente funcionó para mí

    Spinner spinner = new Spinner(this);
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_item, spinnerArray);
    spinnerArrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item );

    spinner = (Spinner) findViewById( R.id.spinner );
    spinner.setAdapter(spinnerArrayAdapter);

66
¿Cuál es el propósito de esto Spinner spinner = new Spinner(this);cuando haces estospinner = (Spinner) findViewById( R.id.spinner );
— Mr5

por qué error: no se encontró un constructor adecuado para ArrayAdapter (<anónimo OnItemSelectedListener>, int, DetailData), el constructor ArrayAdapter.ArrayAdapter (Context, int, int, List <String>) no es aplicable.
— user151968

6

este trabajo para mi: -

String[] array = {"A", "B", "C"};
String abc = "";


Spinner spinner = new Spinner(getContext());
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, array); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);

Estoy usando un fragmento.


3

En el idioma Kotlin puedes hacerlo de esta manera:

val values = arrayOf(
    "cat",
    "dog",
    "chicken"
)

ArrayAdapter(
    this,
    android.R.layout.simple_spinner_item,
    values
).also {
    it.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = it
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.