public class CustomAdapter extends ArrayAdapter { Cursor c; String TAG = "CustomAdapter"; private Context context = null; ArrayList elements = null; private ArrayList data = null; public static String contactName; public static int count = 0; private ArrayList itemChecked = null; public static List messages; public static List contactID; String body; String phoneNumber; public CustomAdapter(Context context, int type, ArrayList elements) { super(context, type, elements); data = elements; this.elements = elements; this.context = context; } // THIS IS SIMPLY A CLASS VIEW WILL HOLD DIFFERENT VIEWS OF YOUR ROW. static class ViewHolder { public ImageView photo; public TextView contact; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View rowView = convertView; final ViewHolder holder; if (rowView == null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // HERE I AM INFLATING LISTVIEW LAYOUT. rowView = inflater.inflate(R.layout.contact_entry, null, false); holder = new ViewHolder(); holder.photo = (ImageView) rowView.findViewById(R.id.iv_contactPic); holder.contact = (TextView) rowView .findViewById(R.id.contactEntryText); rowView.setTag(holder); // RETRIEVE LATEST CONTACTS WHO SENT SMS (for visual) contactID = new ArrayList(); contactID = elements; String folder = "content://sms/inbox/"; Uri mSmsQueryUri = Uri.parse(folder); contactID = new ArrayList(); try { c = context.getContentResolver().query( mSmsQueryUri, new String[] { "_id", "thread_id", "address", "date", "body" }, null, null, null); if (c == null) { Log.i(TAG, "cursor is null. uri: " + mSmsQueryUri); } c.moveToFirst(); while (c.moveToNext()) { phoneNumber = c.getString(0); contactID.add(phoneNumber); } } catch (Exception e) { // Log.e(TAG, e.getMessage()); } finally { c.close(); } } else { holder = (ViewHolder) rowView.getTag(); } if (holder != null) { // bind the data to the row views holder.contact.setText(data.get(position)); holder.photo.setImageBitmap(getByteContactPhoto(contactID .get(position))); // SHOW CONTACT PHOTO IF IT EXISTS. IF NOT, DEFAULT (***NOT WORKING***) Long l = Long.parseLong(contactID.get(position)); contactPhoto = loadContactPhoto(context.getContentResolver(), l); if(contactPhoto == null){ holder.photo.setImageResource(R.drawable.ic_intel); } else{ holder.photo.setImageBitmap(contactPhoto); } return rowView; } // end if // GET CONTACT PHOTO private static Bitmap loadContactPhoto(ContentResolver cr, long id) { Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri); if (input == null) { return null; } return BitmapFactory.decodeStream(input); } } // end class