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

Seleccionar0r
fuente

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); 
Brandon O'Rourke
fuente
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);
Yann Masoch
fuente
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).

Bruno Bieri
fuente
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);
Opy
fuente
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.

Arish Khan
fuente
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
}
Micer
fuente