Open In App

SimpleAdapter in Android with Example

Last Updated : 11 Feb, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

In Android, whenever we want to bind some data which we get from any data source (e.g. ArrayList, HashMap, SQLite, etc.) with a UI component(e.g. ListView, GridView, etc.) then Adapter comes into the picture. Basically Adapter acts as a bridge between the UI component and data sources. Here Simple Adapter is one type of Adapter. It is basically an easy adapter to map static data to views defined in our XML file(UI component) and is used for customization of List or Grid items.

Here we use an ArrayList of Map (e.g. hashmap, mutable map, etc.) for data-backing. Each entry in an ArrayList is corresponding to one row of a list. The Map contains the data for each row. Now to display the row we need a view for which we used to specify a custom list item file (an XML file).

General Syntax of SimpleAdapter

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 

Parameters

Parameters

DataType

Explanation

contextContextWhen we make an object of SimpleAdapter class  It is used to pass the context ( The reference of current activity). 
data

List<? extends Map<String, ?>>

It means a List of Maps whose key's type is String and Value can be any datatype. Each element of the List is different Maps that contain the data of each row and should include all the entries specified in the “from” string array. In our project, we shall use ArrayList.
resource

 Int

This parameter is used to pass the resource id of the layout ( XML file ) which should contain the different views of each row of the list. The layout file should include at least those named views defined in "to".
fromArray of StringA list of column names that will be added to the Map associated with each item. In this array, there should be a column name for each item (Views) of each row of the list.
toArray of intThis array parameter stores the ids of different views that should display the column in the “from” parameter. These should all be TextViews. The first N views in this list are given the values of the first N columns in the “from” parameter.

Example

A sample image is given below to get an idea about what we are going to do in this article. In this project, we are going to make this application which has a list of some fruits and in each row of the list has a fruit image and name.

Note that we are going to implement this same project in both Kotlin and Java languages. Now you choose your preferred language.  

simple-array-adapter-example


Step by Step Implementation

Step 1: Create a New Project

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio.

Note: Select Java/Kotlin as the programming language.

Step 2: Working with the activity_main.xml file

In the activity_main.xml file, create a ListView inside a ConstraintLayout. Below is the code for the activity_main.xml file.

activity_main.xml:

XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/simpleListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

activity_main.xml Interface:

simple-array-adapter-interface

Step 3: Create another XML file (named list_row_items) and create UI for each row of the ListView

Create a new Layout Resource file and name it as list_row_items.  

list_row_items.xml

XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="24dp">

    <!--Creating a ImageView-->
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_launcher_background"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!--Creating a TextView-->
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text View"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@+id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="@+id/imageView" />

</androidx.constraintlayout.widget.ConstraintLayout>

list_row_items.xml Interface:

saa-list-view

Step 4: Working with the MainActivity file 

Here we will show you how to implement SimpleAdapter both in Java and Kotlin. Now you choose your preferred one. Below is the code for the MainActivity file. Comments are added inside the code to understand the code in more detail. 

MainActivity File:

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
    }
}

SimpleAdapter holds data and sends the data to the adapter view then the view can take the data from the adapter view and shows the data on the ListView which we have created earlier. 

Output:

For learning more about the topic you can check - Custom SimpleAdapter in Android with Example


Next Article

Similar Reads