Reputation: 19
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
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
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