Aadesh Chaudhary
Aadesh Chaudhary

Reputation: 19

How do i set an image in recyclerview in a fragment from the drawable folder?

I am trying to display a list in RecyclerView which has an Image and a text. The class extends fragment class as it is a part of a Tab. here is my code.

Here is my fragment class.

public class Recharges extends Fragment {

public RecyclerView recyclerView;
private List<GetRecharge> rechargeList = new ArrayList<>();
public RecyclerView.LayoutManager layoutManager;
public Adapter adapter;
ImageView image1, image2;



@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    Toolbar myToolbar = (Toolbar) getActivity().findViewById(R.id.my_toolbar);
    ((AppCompatActivity) getActivity()).setSupportActionBar(myToolbar);

    View rootView = inflater.inflate(R.layout.rechargelist, container, false);


    image1 = new ImageView(getContext());
    image1.setImageResource(R.drawable.account);


    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview1);
    recyclerView.setHasFixedSize(true);

    adapter = (Adapter) new Adapterrecharge(rechargeList);
    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(llm);

    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter((RecyclerView.Adapter) adapter);

    prepareRechargeData();

    return rootView;

}

private void prepareRechargeData() {
    GetRecharge recharge = new GetRecharge("Mad Max: Fury Road", image1 );
    rechargeList.add(recharge);

    //recharge = new GetRecharge("Inside Out", "Animation, Kids & Family", "2015");
    //rechargeList.add(recharge);


    adapter.notifyDataSetChanged();


}

Here is the model class with getter and setter methods.

public class GetRecharge {
private String title;
ImageView image;

public GetRecharge() {
}

public GetRecharge(String title, ImageView image) {
    this.title = title;
    this.image = image;
}

public String getTitle() {
    return title;
}

public void setTitle(String name) {
    this.title = name;
}

public ImageView getImage() {
    return image;
}

public void setImage(ImageView image) {
    this.image = image;
}


}

And this is the adapter class

public class Adapterrecharge extends RecyclerView.Adapter<Adapterrecharge.MyViewHolder> {

private List<GetRecharge> rechargeList;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView title;
    ImageView image;

    public MyViewHolder(View view) {
        super(view);
        image = (ImageView) view.findViewById(R.id.image);
        title = (TextView) view.findViewById(R.id.title);

    }
}


public Adapterrecharge(List<GetRecharge> rechargeList) {
    this.rechargeList = rechargeList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.rechargelist, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    GetRecharge recharge = rechargeList.get(position);
    holder.title.setText(recharge.getTitle());
    holder.image.setImageDrawable(recharge.getImage());

}

@Override
public int getItemCount() {
    return rechargeList.size();
}
}

Upvotes: 0

Views: 8616

Answers (2)

AMAN SINGH
AMAN SINGH

Reputation: 3561

You should not use ImageView in custom class. you can use like this

public class GetRecharge {

private String title;
private int imageView;


public GetRecharge(String title, ImageView image) {
    this.title = title;
    this.image = image;
}


public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public int getImageView() {
    return imageView;
}

public void setImageView(int imageView) {
    this.imageView = imageView;
}

}

and use this in your BindViewHolder like this

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.title.setText(dataList.get(position).getTitle());
    holder.imageView.setImageResource(dataList.get(position).getImageView());

}

Hope this will help others also

Upvotes: 3

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

Reputation: 132972

Here:

image1 = new ImageView(getContext());

just creating ImageView object not setting LayoutParams for View. do it as:

image1 = new ImageView(getContext());
image1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
LayoutParams.WRAP_CONTENT));
image1.setImageResource(R.drawable.account);

Another or easy way is just pass R.drawable.account int id to GetRecharge and call : holder.image.setImageResource(recharge.getImage());

Upvotes: 3

Related Questions