AdapterView
es un ViewGroup
que muestra los elementos cargados en un adaptador. El tipo de adaptador más común viene de una fuente de datos basada en arreglos.
En esta guía, se muestra cómo completar varios pasos clave relacionados con la configuración de un adaptador.
Rellena el diseño con datos
Para agregar datos al diseño que creas en la IU de la app, agrega un código similar al siguiente:
Kotlin
val PROJECTION = arrayOf(Contacts.People._ID, People.NAME) ... // Get a Spinner and bind it to an ArrayAdapter that // references a String array. val spinner1: Spinner = findViewById(R.id.spinner1) val adapter1 = ArrayAdapter.createFromResource( this, R.array.colors, android.R.layout.simple_spinner_item) adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) spinner1.adapter = adapter1 // Load a Spinner and bind it to a data query. val spinner2: Spinner = findViewById(R.id.spinner2) val cursor: Cursor = managedQuery(People.CONTENT_URI, PROJECTION, null, null, null) val adapter2 = SimpleCursorAdapter(this, // Use a template that displays a text view android.R.layout.simple_spinner_item, // Give the cursor to the list adapter cursor, // Map the NAME column in the people database to... arrayOf(People.NAME), // The "text1" view defined in the XML template intArrayOf(android.R.id.text1)) adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) spinner2.adapter = adapter2
Java
// Get a Spinner and bind it to an ArrayAdapter that // references a String array. Spinner s1 = (Spinner) findViewById(R.id.spinner1); ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.colors, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s1.setAdapter(adapter); // Load a Spinner and bind it to a data query. private static String[] PROJECTION = new String[] { People._ID, People.NAME }; Spinner s2 = (Spinner) findViewById(R.id.spinner2); Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null); SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, // Use a template // that displays a // text view cur, // Give the cursor to the list adapter new String[] {People.NAME}, // Map the NAME column in the // people database to... new int[] {android.R.id.text1}); // The "text1" view defined in // the XML template adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s2.setAdapter(adapter2);
Ten en cuenta que es necesario tener la columna People._ID en proyección utilizada con CursorAdapter o, de lo contrario, obtendrás una excepción.
Si, durante el transcurso de la vida de la app, cambias los datos subyacentes que lee el adaptador, debes llamar a notifyDataSetChanged()
. Eso notificará a la View adjunta que los datos se modificaron y deben actualizarse.
Nota: Con Android Studio 3.6 y versiones posteriores, la función de vinculación de vistas puede reemplazar las llamadas findViewById()
, y proporciona seguridad relativa al tiempo de compilación para el código que interactúa con las vistas. Puedes usar la vinculación de vistas en lugar de findViewById()
.
Maneja las selecciones de usuario
Para manejar la selección del usuario, configura el miembro AdapterView.OnItemClickListener
de la clase en un objeto de escucha y capta los cambios de selección.
Kotlin
val historyView: ListView = findViewById(R.id.history) historyView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id -> Toast.makeText(context, "You've got an event", Toast.LENGTH_SHORT).show() }
Java
// Create a message handling object as an anonymous class. private OnItemClickListener messageClickedHandler = new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { // Display a messagebox. Toast.makeText(context,"You've got an event",Toast.LENGTH_SHORT).show(); } }; // Now hook into our object and set its onItemClickListener member // to our class handler object. historyView = (ListView)findViewById(R.id.history); historyView.setOnItemClickListener(messageClickedHandler);
Para obtener más información, consulta el tema Ícono giratorio.