I have a RecyclerView and successfully adapted some data. I have a problem. In the onBindViewHolder method, I am trying to add a custom view in a linear layout. The custom view is successfully added, but in scroll up or down views are duplicated. I want to add only once with items.
My code:
public class TrainsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public ArrayList<Train> trains;
public Context context;
private LayoutInflater inflater;
public OnItemClickListener mOnItemClickListener;
public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
}
public class GenericViewHolder extends RecyclerView.ViewHolder {
public TextView stationName;
public LinearLayout vagoncontainer;
public GenericViewHolder(View view) {
super(view);
stationName = (TextView) view.findViewById(R.id.station_item_name);
vagoncontainer = (LinearLayout) view.findViewById(R.id.vagon_container);
}
}
public TrainsAdapter(Context context, ArrayList<Train> trains) {
this.context = context;
this.trains = trains;
inflater = LayoutInflater.from(context);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.trains_adapter_item, parent, false);
GenericViewHolder holder = new GenericViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (holder instanceof GenericViewHolder) {
GenericViewHolder genericViewHolder = (GenericViewHolder) holder;
Train train = trains.get(position);
ArrayList<Vagons> vagons = train.getVagons();
for (int i = 0; i < vagons.size(); i++) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
LinearLayout vagonView = (LinearLayout) layoutInflater.inflate(R.layout.trains_vagon_child, null);
Button button = (Button) vagonView.findViewById(R.id.button);
if (vagons.get(i).getEnable().equals("1"))
button.setVisibility(View.VISIBLE);
else
button.setVisibility(View.GONE);
button.setText(vagons.get(i).getName() + " " + vagons.get(i).getAmount());
genericViewHolder.vagoncontainer.addView(vagonView);
}
genericViewHolder.stationName.setText(train.getDeparture());
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemCount() {
return trains.size();
}
public Train getItem(int position) {
return trains.get(position);
}
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
}
How can I solve my problem?