Problem: Android – ListView with Two TextViews and ImageView
Welcome to the Part 4 of ListView
series. So far this series:
- Part 1 – Simple ListView
- Part 2 – ListView with Two TextView
- Part 3 – ListView with Two TextView and One ImageView
This part is just an extended part of Part 3, where we discussed about taking ImageView
into each items. In this part, we will see how we can display different images into the ImageView
in every items.
For example:
main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ListView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/listView4" android:layout_alignParentLeft="true"> </ListView> </RelativeLayout>
listitem_row.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:padding="5dip"> <ImageView android:layout_width="50dip" android:layout_height="50dip" android:id="@+id/imgViewLogo" android:src="@drawable/icon" android:layout_alignParentLeft="true" android:layout_centerInParent="true" android:scaleType="center"> </ImageView> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/txtViewTitle" android:layout_toRightOf="@+id/imgViewLogo" android:layout_marginLeft="2dip"> </TextView> <TextView android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/txtViewDescription" android:layout_toRightOf="@+id/imgViewLogo" android:layout_below="@+id/txtViewTitle" android:layout_marginLeft="2dip"> </TextView> </RelativeLayout>
ListView4Activity.java
package com.technotalkative.customlistview4; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class ListView4Activity extends Activity implements OnItemClickListener { /** Called when the activity is first created. */ ListView lview3; ListViewCustomAdapter adapter; private static String month[] = {"Add","Delete","Down","Information","Help", "Download","Mail","Search","Settings"}; private static String desc[] = {"Add desc","Delete desc","Down desc", "Information desc","Help desc","Download desc","Mail desc", "Search desc","Settings desc"}; private static int icons[] = {R.drawable.ic_add, R.drawable.ic_delete, R.drawable.ic_down, R.drawable.ic_info, R.drawable.ic_help, R.drawable.ic_download, R.drawable.ic_mail, R.drawable.ic_search, R.drawable.ic_settings}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lview3 = (ListView) findViewById(R.id.listView4); adapter = new ListViewCustomAdapter(this, month, desc, icons); lview3.setAdapter(adapter); lview3.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { // TODO Auto-generated method stub Toast.makeText(this, "Title => "+month[position]+" n Description => "+desc[position], Toast.LENGTH_SHORT).show(); } }
ListViewCustomAdapter.java
package com.technotalkative.customlistview4; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class ListViewCustomAdapter extends BaseAdapter { public String title[]; public String description[]; public int images[]; public Activity context; public LayoutInflater inflater; public ListViewCustomAdapter(Activity context,String[] title, String[] description, int[] images) { super(); this.context = context; this.title = title; this.description = description; this.images = images; this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return title.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } public static class ViewHolder { ImageView imgViewLogo; TextView txtViewTitle; TextView txtViewDescription; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder; if(convertView==null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.listitem_row, null); holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle); holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription); convertView.setTag(holder); } else holder=(ViewHolder)convertView.getTag(); holder.imgViewLogo.setImageResource(images[position]); holder.txtViewTitle.setText(title[position]); holder.txtViewDescription.setText(description[position]); return convertView; } }
Note: Create “drawable” folder inside the android application, store the same images inside it.