tags:

views:

40

answers:

1

Hello I have this code:`public class MaxsapListAdapter extends BaseAdapter {

    private LayoutInflater mInflater;
    private Bitmap mIcon1;
    private Bitmap mIcon2;
    private Bitmap mIconCall;
    private String[] DATA;

    MaxsapListAdapter(Context context, String[] DATA) {
        // Cache the LayoutInflate to avoid asking for a new one each time.
        mInflater = LayoutInflater.from(context);

        // Icons bound to the rows.
        mIcon1 = BitmapFactory.decodeResource(context.getResources(),
                R.drawable.icon48x48_1);
        mIcon2 = BitmapFactory.decodeResource(context.getResources(),
                R.drawable.icon48x48_2);
        mIconCall = BitmapFactory.decodeResource(context.getResources(), R.drawable.call);
        this.DATA = DATA;
    }

    /**
     * The number of items in the list is determined by the number of speeches
     * in our array.
     * 
     * @see android.widget.ListAdapter#getCount()
     */
    public int getCount() {
        return DATA.length;
    }

    /**
     * Since the data comes from an array, just returning the index is sufficent
     * to get at the data. If we were using a more complex data structure, we
     * would return whatever object represents one row in the list.
     * 
     * @see android.widget.ListAdapter#getItem(int)
     */
    public Object getItem(int position) {
        return position;
    }

    /**
     * Use the array index as a unique id.
     * 
     * @see android.widget.ListAdapter#getItemId(int)
     */
    public long getItemId(int position) {
        return position;
    }

    /**
     * Make a view to hold each row.
     * 
     * @see android.widget.ListAdapter#getView(int, android.view.View,
     *      android.view.ViewGroup)
     */
    public View getView(int position, View convertView, ViewGroup parent) {
        // A ViewHolder keeps references to children views to avoid unneccessary
        // calls
        // to findViewById() on each row.
        ViewHolder holder;

        // When convertView is not null, we can reuse it directly, there is no
        // need
        // to reinflate it. We only inflate a new View when the convertView
        // supplied
        // by ListView is null.
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_icon_text, null);

            // Creates a ViewHolder and store references to the three children
            // views
            // we want to bind data to.
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.text);
            holder.icon = (ImageView) convertView.findViewById(R.id.icon);
            holder.btn = (ImageButton) convertView.findViewById(R.id.button);
            convertView.setTag(holder);
        } else {
            // Get the ViewHolder back to get fast access to the TextView
            // and the ImageView.
            holder = (ViewHolder) convertView.getTag();
        }
        // Bind the data efficiently with the holder.
        holder.text.setText(DATA[position]);
        holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);
        holder.btn.setImageBitmap(mIconCall);
        holder.btn.setId((int)this.getItemId(position));
        holder.btn.setFocusable(false);
        holder.btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                      Log.e("maxsap","--------*ButtonClicked*---------");
              Log.e("maxsap","--------"+v.setTag(key, tag)+"---------");
        Intent callIntent = new Intent(v.getContext(),PhoneCall.class);
                Log.e("maxsap",PhoneCall.class.toString());
                startActivity(callIntent);  
            }
        });
        return convertView;
    }

     class ViewHolder {
        TextView text;
        ImageView icon;
        ImageButton btn;
    }
}`

which loads some arbitrary data array on a list and sets some example icons too,I would like to be able to use users contacts on my list next to users name e.g. the list will be as many rows as contacts user has on his phone and in every contact that there is a photo load that photo next to contacts name else load a blank image, is this possible? and how?

regards maxsap.

A: 

If you want to add contacts and photos to your list you'll need to access the Contacts API.

For android versions up to 1.6 you'll be using Contacts.People and for 2.0 and greater you'll want to make use of ContactsContract.Contacts. Both of these will give you access to the contact display name and default photo.

There are plenty of examples around of how to make use of these, including some official ones on the android site.

Here's an article that should get you started on the new contacts model: http://developer.android.com/resources/articles/contacts.html

It includes some useful code snippets that should help you get started.

Oh, Don't forget to add permissions for displaying contacts in your manifest. :)

Marloke
Hello I would like to read data not insert and be able to show them on a list
maxsap
When I say "add contacts" I meant to your list not to the database. The process for getting the contact data to show in your list is still as I have listed above. If you want an easier way to show contacts I might recommend extending SimpleCursorAdapter instead of BaseAdapter. You can still use BaseAdapter if you choose, you just have to do all of the cursor work yourself. Here's a link with an example to get you started on accessing contacts: http://developer.android.com/resources/samples/BusinessCard/index.html
Marloke