ListView using Custom ArrayAdapter Android

CodingwithSaud
4 min readAug 24, 2021

Step 1 : Select File -> New -> Project -> Android Application Project. Fill the forms, create a Blank Activity and click on Finish button.
Step 2 : Open res -> layout ->activity_main.xml and add following code :

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

android : paddingBottom = “@dimen/activity_vertical_margin”

android : paddingLeft = “@dimen/activity_horizontal_margin”

android : paddingRight = “@dimen/activity_horizontal_margin”

android : paddingTop = “@dimen/activity_vertical_margin”

tools : context =”com.saud.android.listview_customarrayadapter.MainActivity”>

< ListView

android : id = “@+id/listView1”

android : layout_width = “match_parent”

android : layout_height = “wrap_content”

android : layout_centerHorizontal = “true”

android : layout_centerVertical = “true” >

< / ListView >

< / RelativeLayout >

Step 2 : Open res -> layout ->Create new listitem_row.xml and add following code :

<? xml version = “1.0” encoding = “utf-8” ?>

< LinearLayout xmlns : android = “http://schemas.android.com/apk/res/android"

android : layout_width = “match_parent”

android : layout_height = “match_parent”

android : layout_gravity = “center”

android : gravity = “center”

android : orientation = “horizontal” >

< TextView

android : id = “@+id/num_name”

android : layout_width = “wrap_content”

android : layout_height = “wrap_content”

android : layout_gravity = “center”

android : gravity = “left”

android : textStyle = “bold” / >

< ImageView

android : id = “@+id/num_images”

android : layout_width = “wrap_content”

android : layout_height = “wrap_content”

android : layout_gravity = “center”

android : contentDescription = “TODO” / >

< / LinearLayout >

Step 4 : Open src -> package ->MainActivity.java and add following code :

package com . saud. android .listview_customarrayadapter ;

import android . app . Activity ;

import android . os . Bundle ;

import android . view . View ;

import android . widget . AdapterView ;

import android . widget . ListView ;

import android . widget . Toast ;

public class MainActivity extends Activity {

ListView list ;

String [ ] numNames = { “Zero” , “One” , “Two” ,”Three” , “Four” , “Five” , “Six” ,

“Seven” , “Eight” , “Nine”

} ;

Integer [ ] numImage = { R . drawable . zero , R .drawable . one , R . drawable . two ,

R . drawable . three , R . drawable . four , R .drawable . five , R . drawable . six ,

R . drawable . seven , R . drawable . eight , R .drawable . nine } ;

@Override

protected void onCreate ( BundlesavedInstanceState ) {

super . onCreate ( savedInstanceState ) ;

setContentView ( R . layout . activity_main ) ;

CustomListAdapter adapter = newCustomListAdapter ( this , numNames ,

numImage ) ;

list = ( ListView ) findViewById ( R . id . listView1 );

list . setAdapter ( adapter ) ;

list . setDividerHeight ( 1 ) ;

list . setOnItemClickListener ( new AdapterView .OnItemClickListener ( ) {

@Override

public void onItemClick ( AdapterView < ? >parent , View view ,

int position , long id ) {

Toast . makeText ( MainActivity . this ,

“You Clicked at “ + numNames [ +position ] ,

Toast . LENGTH_SHORT ) . show ( ) ;

}

} ) ;

}

}

Step 5 : Open src -> package ->Create new class CustomListAdapter.java and add following code :

package com . skholingua . android .listview_customarrayadapter ;

import android . app . Activity ;

import android . content . Context ;

import android . view . LayoutInflater ;

import android . view . View ;

import android . view . ViewGroup ;

import android . widget . ArrayAdapter ;

import android . widget . ImageView ;

import android . widget . TextView ;

public class CustomListAdapter extends ArrayAdapter<String> {

private final Activity context ;

private final String [ ] listNumNames ;

private final Integer [ ] listNumImages ;

public CustomListAdapter ( Context cont , String [ ]listNumNames ,

Integer [ ] listNumImages ) {

super ( cont , R . layout . listitem_row ,listNumNames ) ;

this . context = ( Activity ) cont ;

this . listNumNames = listNumNames ;

this . listNumImages = listNumImages ;

}

static class ViewHolder {

public TextView txtTitle ;

public ImageView imageViewoff ;

}

@Override

public View getView ( int position , View rowView ,ViewGroup parent ) {

ViewHolder holder = null ;

if ( rowView == null ) {

holder = new ViewHolder ( ) ;

LayoutInflater inflater = context .getLayoutInflater ( ) ;

rowView = inflater . inflate ( R . layout .listitem_row , parent , false ) ;

holder . txtTitle = ( TextView ) rowView .findViewById ( R . id . num_name ) ;

holder . imageViewoff = ( ImageView ) rowView

. findViewById ( R . id . num_images ) ;

rowView . setTag ( holder ) ;

} else {

holder = ( ViewHolder ) rowView . getTag ( ) ;

}

holder . txtTitle . setText ( listNumNames [position ] ) ;

holder . imageViewoff . setImageResource (listNumImages [ position ] ) ;

return rowView ;

}

}

Step 6 : Open AndroidManifest.xml and add following code :

<? xml version = “1.0” encoding = “utf-8” ?>

< manifest xmlns : android = “http://schemas.android.com/apk/res/android"

package =”com.skholingua.android.listview_customarrayadapter”

android : versionCode = “1”

android : versionName = “1.0” >

< uses — sdk

android : minSdkVersion = “16”

android : targetSdkVersion = “19” / >

< application

android : allowBackup = “true”

android : icon = “@drawable/ic_launcher”

android : label = “@string/app_name”

android : theme = “@style/AppTheme” >

< activity

android : name = “.MainActivity”

android : label = “@string/app_name” >

< intent — filter >

< action android : name =”android.intent.action.MAIN” / >

< category android : name =”android.intent.category.LAUNCHER” / >

< / intent — filter >

< / activity >

< / application >

< / manifest >

--

--