SimpleAdapter en Android con ejemplo

En Android, siempre que queramos vincular algunos datos que obtenemos de cualquier fuente de datos (p. ej., ArrayList, HashMap, SQLite, etc.) con un componente de UI (p. ej., ListView, GridView, etc.), el adaptador entra en escena. Básicamente , el adaptador actúa como un puente entre el componente de la interfaz de usuario y las fuentes de datos. Aquí Simple Adapter es un tipo de adaptador. Es básicamente un adaptador sencillo para asignar datos estáticos a vistas definidas en nuestro archivo XML (componente de interfaz de usuario) y se utiliza para personalizar elementos de Lista o Cuadrícula. Aquí usamos un ArrayList of Map (por ejemplo, hashmap, mutable map, etc.) para el respaldo de datos. Cada entrada en un ArrayList corresponde a una fila de una lista. El Mapa contiene los datos de cada fila. Ahora, para mostrar la fila, necesitamos una vista para la que solíamos especificar un archivo de elemento de lista personalizado (un archivo XML).

Sintaxis general de SimpleAdapter

SimpleAdapter ( Contexto contexto, Lista <? Extiende Mapa < String , ?>> datos, int recurso, String [] desde, int [] a)

***Aquí contexto, datos, recursos, desde y hasta son cinco parámetros***        

 

Parámetros                                        

Tipo de datos

Explicación

contexto Contexto Cuando hacemos un objeto de la clase SimpleAdapter , se usa para pasar el contexto (la referencia de la actividad actual). 
datos

Lista<? extiende Mapa<String, ?>>

*** significa una lista de mapas cuyo tipo de clave es string y el valor puede ser cualquier tipo de datos.

Cada elemento de la lista es un mapa diferente que contiene los datos de cada fila y debe incluir todas las entradas especificadas en la array de strings «desde». En nuestro proyecto, usaremos ArrayList .
recurso

 En t

***Tipo de datos entero

Este parámetro se usa para pasar la identificación del recurso del diseño (archivo XML) que debe contener las diferentes vistas de cada fila de la lista. El archivo de diseño debe incluir al menos las vistas con nombre definidas en «to».
de Una array de tipo String Una lista de nombres de columnas que se agregarán al Mapa asociado con cada elemento. En esta array, debe haber un nombre de columna para cada elemento (Vistas) de cada fila de la lista.
a Una array de tipo int . Este parámetro de array almacena los ID de diferentes vistas que deberían mostrar la columna en el parámetro «desde». Todos estos deberían ser TextViews. Las primeras N vistas de esta lista reciben los valores de las primeras N columnas en el parámetro «desde».

Ejemplo

whatIn este proyecto, vamos a hacer esta aplicación que tiene una lista de algunas frutas y en cada fila de la lista tiene una imagen y un nombre de fruta. Tenga en cuenta que vamos a implementar este mismo proyecto en los lenguajes Kotlin y Java . Ahora elige tu idioma preferido.  

SimpleAdapter in Android with Example

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Abra Android Studio> Crear nuevo proyecto > Seleccione una actividad vacía> Proporcione un nombre de proyecto (aquí nuestro nombre de proyecto es » GFG_SimpleAdapter «).

*** Aquí puede elegir Kotlin o Java que prefiera y elegir el nivel de API según su elección.

***Después de crear el proyecto con éxito, pegue algunas imágenes en la carpeta dibujable en el directorio res . Ahora puede usar las mismas imágenes que he usado en mi proyecto; de lo contrario, puede elegir las imágenes que desee. Para descargar las mismas imágenes, haga clic en el siguiente enlace:

HAGA CLIC AQUÍ

***Tenga en cuenta que es opcional***

Paso 2: trabajar con el archivo activity_main.xml

En el archivo activity_main.xml , cree un ListView dentro de un RelativeLayout . A continuación se muestra el código para el archivo activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
     
    <!--Creating a ListView-->
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="#000000"
        android:dividerHeight="3dp"
        android:padding="5dp" />
 
</RelativeLayout>

interfaz_actividad_principal.xml:

Paso 3: cree otro archivo XML (llamado list_row_items) y cree una interfaz de usuario para cada fila de ListView

Cree un nuevo archivo de recursos de diseño y asígnele el nombre list_row_items .  

A continuación se muestra el código para el archivo list_row_items.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
     
    <!--Creating a ImageView-->
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_margin="10dp"
        android:scaleType="fitCenter"
        android:src="@drawable/ic_launcher_background" />
     
    <!--Creating a TextView-->
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:layout_marginRight="20dp"
        android:layout_toRightOf="@+id/imageView"
        android:gravity="center"
        android:padding="5dp"
        android:text="Text View"
        android:textColor="#808080"
        android:textSize="40sp"
        android:textStyle="bold|italic" />
     
</RelativeLayout>

list_row_items.xml Interfaz:

Paso 4: trabajar con el archivo MainActivity 

Aquí le mostraremos cómo implementar SimpleAdapter tanto en Java como en Kotlin. Ahora elige tu preferido. A continuación se muestra el código para el archivo MainActivity . Se agregan comentarios dentro del código para comprender el código con más detalle. 

Java

import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.HashMap;
 
public class MainActivity extends AppCompatActivity {
 
    ListView listView;
 
    // creating  a String type array (fruitNames)
    // which contains names of different fruits' images
    String fruitNames[] = {"Banana", "Grape", "Guava", "Mango", "Orange", "Watermelon"};
 
    // creating an Integer type array (fruitImageIds) which
    // contains IDs of different fruits' images
    int fruitImageIds[] = {R.drawable.banana,
            R.drawable.grape,
            R.drawable.guava,
            R.drawable.mango,
            R.drawable.orange,
            R.drawable.watermelon};
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // Binding the ListView  of activity_main.xml file
        // with this java code in MainActivity.java
        listView = findViewById(R.id.listView);
 
        // creating an ArrayList of HashMap.The kEY of the HashMap
        // is a String and VALUE is of any datatype(Object)
        ArrayList<HashMap<String, Object>> list = new ArrayList<>();
 
        // By a for loop, entering different types of data in HashMap,
        // and adding this map including it's datas into the ArrayList
        // as list item and this list is the second parameter of the SimpleAdapter
        for (int i = 0; i < fruitNames.length; i++) {
 
            // creating an Object of HashMap class
            HashMap<String, Object> map = new HashMap<>();
 
            // Data entry in HashMap
            map.put("fruitName", fruitNames[i]);
            map.put("fruitImage", fruitImageIds[i]);
 
            // adding the HashMap to the ArrayList
            list.add(map);
        }
 
        // creating A string type array(from) which contains
        // column names for each View in each row of the list
        // and this array(form) is the fourth parameter of the SimpleAdapter
        String[] from = {"fruitName", "fruitImage"};
 
        // creating an integer type array(to) which contains
        // id of each View in each row of the list
        // and this array(form) is the fifth parameter of the SimpleAdapter
        int to[] = {R.id.textView, R.id.imageView};
 
        // creating an Object of SimpleAdapter class and
        // passing all the required parameters
        SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(), list, R.layout.list_row_items, from, to);
 
        // now setting the simpleAdapter to the ListView
        listView.setAdapter(simpleAdapter);
    }
}

Kotlin

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
import android.widget.SimpleAdapter
import java.util.ArrayList
import java.util.HashMap
 
class MainActivity : AppCompatActivity() {
   
    private lateinit var listView:ListView
   
    // creating  a String type array
      // (fruitNames) which contains
    // names of different fruits' images
    private val fruitNames=arrayOf("Banana","Grape","Guava","Mango","Orange","Watermelon")
     
    // creating an Integer type array (fruitImageIds) which
    // contains IDs of different fruits' images
    private val fruitImageIds=arrayOf(R.drawable.banana,
                              R.drawable.grape,
                              R.drawable.guava,
                              R.drawable.mango,
                              R.drawable.orange,
                              R.drawable.watermelon) 
     
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
         
        // ViewBinding the ListView  of activity_main.xml file
        // with this kotlin code in MainActivity.kt
        listView=findViewById(R.id.listView)
         
        // creating an ArrayList of HashMap.The kEY of the HashMap is
        // a String and VALUE is of any datatype(Any)
        val list=ArrayList<HashMap<String,Any>>()
         
        // By a for loop, entering different types of data in HashMap,
        // and adding this map including it's datas into the ArrayList
        // as list item and this list is the second parameter of the SimpleAdapter
        for(i in fruitNames.indices){
            val map=HashMap<String,Any>()
             
            // Data entry in HashMap
            map["fruitName"] = fruitNames[i]
            map["fruitImage"]=fruitImageIds[i]
           
            // adding the HashMap to the ArrayList
            list.add(map)
        }
         
        // creating A string type array(from) which contains
        // column names for each View in each row of the list
        // and this array(form) is the fourth parameter of the SimpleAdapter
        val from=arrayOf("fruitName","fruitImage")
         
        // creating an integer type array(to) which contains
        id of each View in each row of the list
        and this array(form) is the fifth parameter of the SimpleAdapter*/
         
        val to= intArrayOf(R.id.textView,R.id.imageView)
         
        // creating an Object of SimpleAdapter
          // class and passing
        // all the required parameters
        val simpleAdapter=SimpleAdapter(this,list,R.layout.list_row_items,from,to)
         
        // now setting the simpleAdapter
          // to the ListView
        listView.adapter = simpleAdapter
    }
}

Por lo tanto, SimpleAdapter contiene datos y los envía a la vista del adaptador, luego la vista puede tomar los datos de la vista del adaptador y muestra los datos en el ListView que hemos creado anteriormente. 

***Tenga en cuenta que debe elegir cualquier idioma entre Java y Kotlin como MainActivity para un proyecto en particular***

Producción:

Publicación traducida automáticamente

Artículo escrito por the_dir_one y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *