Tuesday, 31 July 2012

Custom List View

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:


No comments:

Post a Comment