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.