Martin
Martin

Reputation: 2266

Android: Populate ListView with CustomAdapter

I would like to create ListView using CustomAdapter that extends BaseAdapter. I have CustomAdapter(Context context, List<Map<String, String>> dataList).

How do I get data from Map and set my views in the getView() method? Before I've tried to use SimpleAdapter but I need to set bitmap stored on SD, and path to image I've stored in map. Every help is appreciated.

Here's my source of CustomAdapter:

public class CustomAdapter extends BaseAdapter {

private Context context;
private String pricePrecision = null;
private List<Map<String, String>> data;

public CustomAdapter(Context context, List<Map<String, String>> data) {
    super();
    this.context = context;
    this.data = data;
}

@Override
public int getCount() {
    return (data == null) ? 0 : data.size();
}

@Override
public Object getItem(int position) {
    return data.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder = null;
    LayoutInflater inflater = ((LayoutInflater) context
            .getSystemService(Context.LOCATION_SERVICE));
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.order_list_item, null);

        viewHolder = new ViewHolder();
        viewHolder.itemThumbnail = ((ImageView) convertView
                .findViewById(R.id.ivItemThumb));
        viewHolder.itemName = ((TextView) convertView
                .findViewById(R.id.tvItemName));
        viewHolder.itemPrice = ((TextView) convertView
                .findViewById(R.id.tvItemPrice));
        convertView.setTag(viewHolder);

    } else {
        viewHolder = ((ViewHolder) convertView.getTag());
    }
    return null;
}

private class ViewHolder {
    private ImageView itemThumbnail;
    private TextView itemName;
    private TextView itemPrice;
}

}

Upvotes: 1

Views: 119

Answers (2)

Hisham Muneer
Hisham Muneer

Reputation: 8742

A little addition to (ρяσѕρєя K)'s code. You might want to set listeners on your thumbnails.

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder = null;
    LayoutInflater inflater = ((LayoutInflater) context
            .getSystemService(Context.LOCATION_SERVICE));
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.order_list_item, null);

        viewHolder = new ViewHolder();
        viewHolder.itemThumbnail = ((ImageView) convertView
                .findViewById(R.id.ivItemThumb));
        viewHolder.itemName = ((TextView) convertView
                .findViewById(R.id.tvItemName));
        viewHolder.itemPrice = ((TextView) convertView
                .findViewById(R.id.tvItemPrice));

        viewHolder.itemThumbnail.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        convertView.setTag(viewHolder);

    } else {
        viewHolder = ((ViewHolder) convertView.getTag());
    }
    viewHolder.itemThumbnail.setImageBitmap(data.get(position).get(
            "thumbnail"));
    viewHolder.itemName.setText(data.get(position).get("name"));
    viewHolder.itemPrice.setText("" + data.get(position).get("price"));
    return viewHolder;
}

private class ViewHolder {
    private ImageView itemThumbnail;
    private TextView itemName;
    private TextView itemPrice;
}

Upvotes: 0

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132982

Change your getView method as :

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder = null;
    LayoutInflater inflater = ((LayoutInflater) context
            .getSystemService(Context.LOCATION_SERVICE));
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.order_list_item, null);

        viewHolder = new ViewHolder();
        viewHolder.itemThumbnail = ((ImageView) convertView
                .findViewById(R.id.ivItemThumb));
        viewHolder.itemName = ((TextView) convertView
                .findViewById(R.id.tvItemName));
        viewHolder.itemPrice = ((TextView) convertView
                .findViewById(R.id.tvItemPrice));
        convertView.setTag(viewHolder);

    } else {
        viewHolder = ((ViewHolder) convertView.getTag());
    }
     viewHolder.itemThumbnail.setImageBitmap(data.get(position).get("thumbnail"));
     viewHolder.itemName.setText(data.get(position).get("name"));
     viewHolder.itemPrice.setText(""+data.get(position).get("price")); 
    return viewHolder;
}

private class ViewHolder {
    private ImageView itemThumbnail;
    private TextView itemName;
    private TextView itemPrice;
}

Upvotes: 2

Related Questions