CustomList.java
import java.util.List;
import java.util.Vector;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class CustomList extends Activity
{
private LayoutInflater mInflater;
private Vector<RowData> data;
ListView list;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list=(ListView)findViewById(R.id.list);
mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
data = new Vector<RowData>();
RowData rd = new RowData("android ice cream sandwich", "Version 4.0 ");
data.add(rd);
rd = new RowData("android jelly bean", "Version 4.1 ");
data.add(rd);
final Builder builder = new AlertDialog.Builder(this);
//Settings adapter to fill the RowData
CustomAdapter adapter = new CustomAdapter(this, R.layout.custom_row,R.id.call, data);
list.setAdapter(adapter);
//ListItem click
list.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
{
CustomAdapter adapter = (CustomAdapter) arg0.getAdapter();
RowData row = adapter.getItem(arg2);
builder.setTitle(row.mItem);
builder.setMessage(row.mDescription + " -> " + arg2 );
builder.setPositiveButton("ok", null);
builder.show();
}//onItemClick
});
}//onCreate
/**
* Data type used for custom adapter. Single item of the adapter.
*/
private class RowData
{
protected String mItem;
protected String mDescription;
RowData(String item, String description)
{
mItem = item;
mDescription = description;
}
@Override
public String toString()
{
return mItem + " " + mDescription;
}
}//RowData
private class CustomAdapter extends ArrayAdapter<RowData>
{
public CustomAdapter(Context context, int resource,int textViewResourceId, List<RowData> objects)
{
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
//widgets displayed by each item in your list
TextView item = null;
TextView description = null;
ImageView image=null;
//data from your adapter
RowData rowData= getItem(position);
//we want to reuse already constructed row views...
if(null == convertView)
{
convertView = mInflater.inflate(R.layout.custom_row, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
item = holder.getItem();
item.setText(rowData.mItem);
description = holder.getDescription();
description.setText(rowData.mDescription);
image=holder.getImage();
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(), "Click on the image", Toast.LENGTH_SHORT).show();
}
});
return convertView;
}//getView
}//CustomAdapter
/**
* Wrapper for row data.
*
*/
private class ViewHolder
{
private View mRow;
private TextView description = null;
private TextView item = null;
ImageView image=null;
public ViewHolder(View row)
{
mRow = row;
}
public TextView getDescription()
{
if(null == description)
{
description = (TextView) mRow.findViewById(R.id.call);
}
return description;
}
public TextView getItem()
{
if(null == item)
{
item = (TextView) mRow.findViewById(R.id.callnumber);
}
return item;
}
public ImageView getImage()
{
if(null == image)
{
image = (ImageView) mRow.findViewById(R.id.starimage);
}
return image;
}
}//Activity
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:background="@android:color/white">
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/list"/>
</LinearLayout>
custom_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/call" android:text="call"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView android:id="@+id/date_time" android:layout_below="@+id/call" android:text="Web ,Jul 31 1:40 PM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView android:id="@+id/callnumber" android:layout_toRightOf="@+id/call"
android:layout_width="wrap_content" android:text="callnumber"
android:layout_height="wrap_content"
/>
<ImageView android:id="@+id/starimage" android:src="@drawable/star" android:layout_marginTop="5dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
start image
Screen:
import java.util.List;
import java.util.Vector;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class CustomList extends Activity
{
private LayoutInflater mInflater;
private Vector<RowData> data;
ListView list;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list=(ListView)findViewById(R.id.list);
mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
data = new Vector<RowData>();
RowData rd = new RowData("android ice cream sandwich", "Version 4.0 ");
data.add(rd);
rd = new RowData("android jelly bean", "Version 4.1 ");
data.add(rd);
final Builder builder = new AlertDialog.Builder(this);
//Settings adapter to fill the RowData
CustomAdapter adapter = new CustomAdapter(this, R.layout.custom_row,R.id.call, data);
list.setAdapter(adapter);
//ListItem click
list.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
{
CustomAdapter adapter = (CustomAdapter) arg0.getAdapter();
RowData row = adapter.getItem(arg2);
builder.setTitle(row.mItem);
builder.setMessage(row.mDescription + " -> " + arg2 );
builder.setPositiveButton("ok", null);
builder.show();
}//onItemClick
});
}//onCreate
/**
* Data type used for custom adapter. Single item of the adapter.
*/
private class RowData
{
protected String mItem;
protected String mDescription;
RowData(String item, String description)
{
mItem = item;
mDescription = description;
}
@Override
public String toString()
{
return mItem + " " + mDescription;
}
}//RowData
private class CustomAdapter extends ArrayAdapter<RowData>
{
public CustomAdapter(Context context, int resource,int textViewResourceId, List<RowData> objects)
{
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
//widgets displayed by each item in your list
TextView item = null;
TextView description = null;
ImageView image=null;
//data from your adapter
RowData rowData= getItem(position);
//we want to reuse already constructed row views...
if(null == convertView)
{
convertView = mInflater.inflate(R.layout.custom_row, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
item = holder.getItem();
item.setText(rowData.mItem);
description = holder.getDescription();
description.setText(rowData.mDescription);
image=holder.getImage();
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(), "Click on the image", Toast.LENGTH_SHORT).show();
}
});
return convertView;
}//getView
}//CustomAdapter
/**
* Wrapper for row data.
*
*/
private class ViewHolder
{
private View mRow;
private TextView description = null;
private TextView item = null;
ImageView image=null;
public ViewHolder(View row)
{
mRow = row;
}
public TextView getDescription()
{
if(null == description)
{
description = (TextView) mRow.findViewById(R.id.call);
}
return description;
}
public TextView getItem()
{
if(null == item)
{
item = (TextView) mRow.findViewById(R.id.callnumber);
}
return item;
}
public ImageView getImage()
{
if(null == image)
{
image = (ImageView) mRow.findViewById(R.id.starimage);
}
return image;
}
}//Activity
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" android:background="@android:color/white">
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/list"/>
</LinearLayout>
custom_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/call" android:text="call"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView android:id="@+id/date_time" android:layout_below="@+id/call" android:text="Web ,Jul 31 1:40 PM"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView android:id="@+id/callnumber" android:layout_toRightOf="@+id/call"
android:layout_width="wrap_content" android:text="callnumber"
android:layout_height="wrap_content"
/>
<ImageView android:id="@+id/starimage" android:src="@drawable/star" android:layout_marginTop="5dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentRight="true"/>
</RelativeLayout>
</LinearLayout>
start image
Screen:

