1

I have a listview and I'm going to add some imageviews to each row through my Adapter; when I run my program it does not give any errors but it adds wrong numbers of imageviews to the listview, and also when I scroll the listview, the numbers of the imageviews change! My adapter class is as shown below:

public class RideAdapter extends ArrayAdapter {
List list = new ArrayList();
public RideAdapter(Context context, int resource){
    super(context, resource);
}

public void add(Rides object) {
    super.add(object);
    list.add(object);
}

@Override
public int getCount() {
    return list.size();
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row;
    row = convertView;
    RideHolder rideHolder;
    if(row == null){

        LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.list_row, parent, false);
        rideHolder = new RideHolder();
        rideHolder.tx_start = (TextView)row.findViewById(R.id.tx_start);
        rideHolder.tx_end = (TextView)row.findViewById(R.id.tx_end);
        rideHolder.tx_seats = (TextView)row.findViewById(R.id.tx_seats);
        rideHolder.tx_distance = (TextView)row.findViewById(R.id.tx_distance);
        rideHolder.tx_name = (TextView)row.findViewById(R.id.tx_name);
        rideHolder.linearLayout_seats = (LinearLayout) row.findViewById(R.id.linearLayout_seats);
        row.setTag(rideHolder);
    }
    else {
        rideHolder = (RideHolder) row.getTag();
    }
    Rides ride = (Rides) this.getItem(position);
    rideHolder.tx_start.setText(ride.getStart());
    rideHolder.tx_end.setText(ride.getEnd());
    rideHolder.tx_name.setText(ride.getName());

    for(int i = 0; i < ride.getSeats(); i++) {
        ImageView image = new ImageView(this.getContext());
        image.setImageResource(R.drawable.empty_seat);
        rideHolder.linearLayout_seats.addView(image);
    }
    return row;
}

static class RideHolder{
    TextView tx_start, tx_end, tx_seats, tx_distance, tx_name;
    LinearLayout linearLayout_seats;
}

can anyone help me?

Thank you

3
  • please use a recyclerview or the picasso library Commented Aug 17, 2016 at 12:32
  • please tell me what is the height and width of the listview are set to Commented Aug 17, 2016 at 12:39
  • If the Images are not coming from the Internet (URL) but from your drawable folder you need to do something like this --- rideHolder.TheImageView.setImageResource(TheContext.getResources().getIdentifier(ArrayDrawableName, "drawable", TheContext.getPackageName())); -- so all you need is a holder for the ImageView and add the names of drawables in your array for each item in your array Commented Aug 17, 2016 at 12:53

2 Answers 2

2

Just before adding views to layout removeAllViews from layout

 Rides ride = (Rides) this.getItem(position);
 rideHolder.tx_start.setText(ride.getStart());
 rideHolder.tx_end.setText(ride.getEnd());
 rideHolder.tx_name.setText(ride.getName());

 rideHolder.linearLayout_seats.removeAllViews();

 for(int i = 0; i < ride.getSeats(); i++) {
    ImageView image = new ImageView(this.getContext());
    image.setImageResource(R.drawable.empty_seat);
    rideHolder.linearLayout_seats.addView(image);
 }
 return row;
Sign up to request clarification or add additional context in comments.

Comments

0

set setLayoutParams before adding it to layout.

    for(int i = 0; i < ride.getSeats(); i++) {

    //ImageView Setup
    ImageView imageView = new ImageView(this);
    //ImageView imageView = new ImageView(this.getContext());

    //setting image resource
    imageView.setImageResource(R.drawable.empty_seat);

    //setting image position
    imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
    LayoutParams.WRAP_CONTENT));

    //adding view to layout
    rideHolder.linearLayout_seats.addView(image);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.