Search code examples
javaandroidandroid-imageviewandroid-adapterview

Load Image Resource on ViewAdapter


I have a ReciclerView which is using an Adapter called "SimpleItemRecyclerViewAdapter". Each item in the ReciclerView is in the project's "drawable" folder. I was able to set the test on both TextView's but I'm not sure how to do this for the images. Here is the output I'm getting... the images should be appearing over the black square with is a ImageView widget.

enter image description here

Here is the code for my Adapter:

package uk.co.example.calculator.adapters;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import uk.co.example.calculator.R;
import uk.co.example.calculator.ui.activities.Currency;

public class SimpleItemRecyclerViewAdapter extends RecyclerView.Adapter<SimpleItemRecyclerViewAdapter.RecyclerViewSimpleTextViewHolder> {

    // The items to display in your RecyclerView
    private List<Currency> items;

    // Provide a suitable constructor (depends on the kind of dataset)
    public SimpleItemRecyclerViewAdapter(List<Currency> items) {
        this.items = items;
    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return this.items.size();
    }

    // Replace the contents of a view (invoked by the layout manager)
    // Involves populating data into the item through holder
    @Override
    public void onBindViewHolder(RecyclerViewSimpleTextViewHolder holder, int position) {
        Currency currency = items.get(position);
        holder.getName().setText(currency.name);
        holder.getSymbol().setText(currency.symbol);
        holder.getAsset().?????????; // WHAT SHOULD I PUT HERE TO LOAD THE IMAGE FROM THE RAW FOLDER
    }

    // Create new items (invoked by the layout manager)
    // Usually involves inflating a layout from XML and returning the holder
    @Override
    public RecyclerViewSimpleTextViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View itemView = LayoutInflater.from(viewGroup.getContext()).
                inflate(R.layout.currency_list_card_layout, viewGroup, false);
        return new RecyclerViewSimpleTextViewHolder(itemView);
    }


    public class RecyclerViewSimpleTextViewHolder extends RecyclerView.ViewHolder {
        private TextView name;
        private TextView symbol;
        private ImageView asset;

        public RecyclerViewSimpleTextViewHolder(View v) {
            super(v);
            name = (TextView) v.findViewById(R.id.currency_name);
            symbol = (TextView) v.findViewById(R.id.currency_symbol);
            asset = (ImageView) v.findViewById(R.id.currency_asset);
        }

        public TextView getName() {
            return name;
        }

        public TextView getSymbol() {
            return symbol;
        }

        public ImageView getAsset() {
            return asset;
        }

    }
}

Any detailed help on how to display the images contained on the drawable folder would be greatly appreciated.


Solution

  • You can access your imageview from within onBindViewHolder

    For example, place into onBindViewHolder:

    Resources resources = getResources();
    holder.getAsset().setImageDrawable(resources.getDrawable(R.drawable.myimage));