In this Kotlin programming tutorial I will share with you how to use ListView to display list of images. In my example below I will use image as an element in a ListView, but this can be any other UI element or even a view with other elements on it.
Also, this example uses images added to res/drawable folder. So of this code example to work you will need to have an image in your drawable folder to display it.
XML Layout File with ImageView
This layout file defines the skeleton of our single list item. I have saved this file as my_list.xml.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image_item"/> </LinearLayout>
Custom Adaptor
With the help of this custom adapter we will inflate every single item with our desired image. I have saved this file as CustomAdapter.kt
import android.view.ViewGroup import android.app.Activity import android.view.View import android.widget.BaseAdapter import android.widget.ImageView class CustomAdapter(private val context: Activity, private val imageIdList: Array) : BaseAdapter() { override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { val inflater = context.layoutInflater val rowView = inflater.inflate(R.layout.my_list,null) val imageView = rowView.findViewById(R.id.image_item) imageView.setImageResource(imageIdList[p0]) return rowView } override fun getItem(p0: Int): Any { return imageIdList.get(p0) } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return imageIdList.size } }
LinearLayout to Hold ImageView
Create a new xml file with the below content. I named my file as activity_image_list.xml. This file contains an empty LinearLayout to which we will add the ListView.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.appsdeveloperblog.kotlinexample4.ImageList" android:orientation="vertical"> </LinearLayout>
Display List of Images in a ListView
Create a new ImageList.kt file. In this file we will create ListView and populate it with images using the CustomAdapter we have created above. The imageIdList array contains the ID of the images that we want to show in the list.
package com.appsdeveloperblog.kotlinexample4 import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.LinearLayout import android.widget.ListView class ImageList : AppCompatActivity() { var imageIdList = arrayOf<Int>( R.drawable.android, R.drawable.apple, R.drawable.facebook, R.drawable.github, R.drawable.google, R.drawable.microsoft, R.drawable.twitter) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_image_list) val linearLayout = findViewById<LinearLayout>(R.id.linearLayout) val listView = ListView(this) val adapter = CustomAdapter(this, imageIdList) listView.adapter = adapter linearLayout.addView(listView) } }
And this is it. If you run this code example in Android studio you should get a scrollable list of images. Just make sure you add enough images to the list for it to scroll.
I hope this short Kotlin programming tutorial was of some help to you. As always, I encourage you to check the list of books and video courses on Kotlin which I am listing below. You might find something very helpful and helpful in your current project.
If you would like to stay in touch, you can find me on Twitter @kargopolov, Google Plus sergey.kargopolov or subscribe to this blog.
Sergey
Building Mobile Apps for Android with Kotlin – Books
Building Mobile Apps with Kotlin – Video Courses