Inicio » Blog »

8 abril, 2025

Llenar un Spinner con Sqlite y un Adaptador

#Android #Java #XML

Existen varias formas de inflar un spinner, es este caso usaremos un adaptador que permite extender la cantidad de datos consultados a la BD Sqlite

Llenar un Spinner con Sqlite y un Adaptador

Suscríbete a nuestro canal en Youtube

Suscríbirse

¿Quieres mostrar una lista de opciones en un Spinner usando datos de una base SQLite en Android Studio? Llenar un Spinner con datos dinámicos es una tarea común en el desarrollo de apps Android, y hacerlo con SQLite es más sencillo de lo que parece si tienes tus clases bien definidas. En este tutorial, te explico cómo lograrlo paso a paso: desde crear una clase modelo hasta poblar el Spinner con datos de una base de datos local. ¡Ideal para principiantes y desarrolladores que buscan optimizar sus apps!

Índice

  1. ¿Por Qué Usar un Spinner con SQLite?
  2. Requisitos Previos
  3. Paso a Paso: Llenar el Spinner con Datos SQLite
    • Paso 1: Definir la Clase Modelo
    • Paso 2: Configurar la Base de Datos con DBManager
    • Paso 3: Poblar el Spinner en la Activity
  4. Código Completo: Clase Modelo y Activity
  5. Mejoras y Buenas Prácticas
  6. Conclusión: Crea Spinners Dinámicos Fácilmente

¿Por Qué Usar un Spinner con SQLite?

Un Spinner en Android es como un menú desplegable que permite al usuario seleccionar una opción de una lista. Combinarlo con SQLite te da:

  • Dinamismo: Carga datos en tiempo real desde una base local.
  • Flexibilidad: Perfecto para listas como ciudades, categorías o usuarios.
  • Eficiencia: Almacena y consulta datos sin depender de una API externa.

Este enfoque es ideal para apps offline o con requisitos de rendimiento, como formularios o configuraciones.


Requisitos Previos

Antes de empezar, asegúrate de tener:

  • Android Studio: Instalado y actualizado.
  • Conocimientos básicos: Java o Kotlin, XML y conceptos de bases de datos.
  • SQLite: Una base de datos configurada (usaremos una clase DBManager ficticia como ejemplo).
  • Dependencias: Ninguna adicional, ya que SQLite viene integrado en Android.

Paso a Paso: Llenar el Spinner con Datos SQLite

Paso 1: Definir la Clase Modelo

Creamos una clase Ciudades con atributos, constructores, getters, setters y un método toString() para mostrar solo el nombre en el Spinner:

java

/**
 * Clase modelo para representar ciudades en la base de datos
 * Autor: ApptivaWeb - 24/04/2018
 */
public class Ciudades {
    private int id;
    private String nombre;

    public Ciudades(int id, String nombre) {
        this.id = id;
        this.nombre = nombre;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @Override
    public String toString() {
        return nombre; // Solo muestra el nombre en el Spinner
    }
}
  • toString(): Fundamental para que el Spinner muestre el nombre sin necesidad de adaptadores personalizados.

Paso 2: Configurar la Base de Datos con DBManager

Suponemos una clase DBManager que gestiona la conexión y consultas SQLite. Debe incluir un método como ListCiudades() para devolver una lista de objetos Ciudades:

java

List<Ciudades> listaCiudades = dBmanager.ListCiudades("WHERE 1");
  • Nota: Este tutorial asume que DBManager ya está implementado. Más adelante, puedes consultar un tutorial sobre cómo crearlo.

Paso 3: Poblar el Spinner en la Activity

En la actividad, vinculamos el Spinner, obtenemos los datos y configuramos un adaptador:

java

public class AdminUsuarioNuevoActivity extends AppCompatActivity {
    private DBManager dBmanager;
    private Spinner spCiudad;
    private int idCiudad;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_usuario_nuevo);

        // Vincular el Spinner
        spCiudad = findViewById(R.id.spCiudad);

        // Inicializar DBManager
        dBmanager = new DBManager(getApplicationContext());

        // Poblar el Spinner
        List<Ciudades> listaCiudades = dBmanager.ListCiudades("WHERE 1");
        ArrayAdapter<Ciudades> adapter = new ArrayAdapter<>(
            this, 
            android.R.layout.simple_spinner_item, 
            listaCiudades
        );
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spCiudad.setAdapter(adapter);

        // Listener para obtener el ID seleccionado
        spCiudad.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                idCiudad = ((Ciudades) parent.getSelectedItem()).getId();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                idCiudad = 0; // Valor por defecto
            }
        });
    }
}
  • ArrayAdapter: Conecta la lista de ciudades al Spinner.
  • setOnItemSelectedListener: Captura el ID de la ciudad seleccionada.

Código Completo: Clase Modelo y Activity

Ciudades.java

java

/**
 * Clase modelo para representar ciudades en la base de datos
 * Autor: ApptivaWeb - 24/04/2018
 */
public class Ciudades {
    private int id;
    private String nombre;

    public Ciudades(int id, String nombre) {
        this.id = id;
        this.nombre = nombre;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @Override
    public String toString() {
        return nombre;
    }
}

AdminUsuarioNuevoActivity.java

java

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;

public class AdminUsuarioNuevoActivity extends AppCompatActivity {
    private DBManager dBmanager;
    private Spinner spCiudad;
    private int idCiudad;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_usuario_nuevo);

        spCiudad = findViewById(R.id.spCiudad);
        dBmanager = new DBManager(getApplicationContext());

        List<Ciudades> listaCiudades = dBmanager.ListCiudades("WHERE 1");
        ArrayAdapter<Ciudades> adapter = new ArrayAdapter<>(
            this,
            android.R.layout.simple_spinner_item,
            listaCiudades
        );
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spCiudad.setAdapter(adapter);

        spCiudad.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                idCiudad = ((Ciudades) parent.getSelectedItem()).getId();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                idCiudad = 0;
            }
        });
    }
}

XML (activity_admin_usuario_nuevo.xml)

xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">
    
    <Spinner
        android:id="@+id/spCiudad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

Mejoras y Buenas Prácticas

  1. Validación: Verifica que listaCiudades no esté vacía antes de asignarla al adaptador.

    java

    if (listaCiudades.isEmpty()) {
        Toast.makeText(this, "No hay ciudades disponibles", Toast.LENGTH_SHORT).show();
    }
  2. Diseño: Personaliza el Spinner con un layout XML propio si necesitas más control visual.
  3. Rendimiento: Usa Room o una base de datos más moderna en lugar de SQLite puro para proyectos grandes.
  4. Modularidad: Separa la lógica del adaptador en una clase aparte si planeas reutilizarla.
  5. Errores: Maneja excepciones en DBManager para evitar que la app se cierre inesperadamente.

Conclusión: Crea Spinners Dinámicos Fácilmente

Llenar un Spinner con datos de SQLite en Android Studio es un proceso sencillo cuando tienes una clase modelo bien definida y una conexión a la base de datos lista. Con este tutorial, puedes mostrar listas dinámicas y capturar selecciones del usuario en minutos. ¡Personaliza el código, intégralo en tus apps y mejora la experiencia de usuario! ¿Listo para más? Explora cómo crear tu propia clase DBManager en nuestro próximo artículo.


Leido 8377 veces | 1 usuarios

Código fuente no disponible.

Compartir link del tutorial con tus amigos

Test de Cómo Llenar un Spinner con Datos de SQLite en Android Studio

...

1. ¿Qué componente de Android se usa para mostrar una lista desplegable en este tutorial?

2. ¿Qué método de la clase Ciudades determina qué se muestra en el Spinner?

3. ¿Qué clase se usa para conectar la lista de ciudades al Spinner?

4. ¿Qué método de DBManager devuelve la lista de ciudades en el ejemplo?

5. ¿Qué listener se usa para capturar la selección del usuario en el Spinner?

6. ¿Qué atributo de Ciudades se almacena en la variable idCiudad?

7. ¿Qué método de Android Studio vincula el Spinner al layout XML?

8. ¿Qué layout predeterminado se usa para los ítems del Spinner?

9. ¿Qué base de datos se utiliza para almacenar las ciudades en este tutorial?

10. ¿Qué método del ArrayAdapter define el diseño del menú desplegable?


Android Básico App para un Restaurante

USD 11.00

Descarga del código fuente

Android Básico App para un Restaurante
Android PHP MySql App Restaurant

USD 11.00

Descarga del código fuente

Android PHP MySql App Restaurant
Lector QR en Android PHP y MySql

USD 11.00

Descarga del código fuente

Lector QR en Android PHP y MySql
App Minimarket con Scanner QR

USD 200.00

Descarga del código fuente

App Minimarket con Scanner QR

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú