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.
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:
***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